Personalizzazione scadenze

This commit is contained in:
Thomas Zilio 2019-07-25 18:05:47 +02:00
parent 604a8eac6b
commit 30957f2363
15 changed files with 154 additions and 75 deletions

View File

@ -64,6 +64,7 @@ $(document).ready(function(){
last.after($("#custom_fields_bottom-add").html()); last.after($("#custom_fields_bottom-add").html());
start_superselect(); start_superselect();
start_datepickers();
}); });
</script>'; </script>';

View File

@ -268,6 +268,7 @@ if (empty($record) || !$has_access) {
last.after($("#custom_fields_bottom-edit").html()); last.after($("#custom_fields_bottom-edit").html());
start_superselect(); start_superselect();
start_datepickers();
}); });
</script>'; </script>';

View File

@ -1786,3 +1786,7 @@ function submitAjax(form, data = {}, callback = null, errorCallback = null) {
function removeHash() { function removeHash() {
history.replaceState(null, null, ' '); history.replaceState(null, null, ' ');
} }
function replaceAll(str, find, replace) {
return str.replace(new RegExp(find, "g"), replace);
}

View File

@ -77,10 +77,9 @@ if (!empty($record['is_fiscale'])) {
} }
if ($record['stato'] == 'Pagato') { if ($record['stato'] == 'Pagato') {
echo ' echo '
<button type="button" class="btn btn-primary ask tip" data-msg="'.tr('Se riapri questa fattura verrà azzerato lo scadenzario e la prima nota. Continuare?').'" data-method="post" data-op="reopen" data-backto="record-edit" data-title="'.tr('Riaprire la fattura?').'" title="'.tr('Riporta la fattura in stato bozza e ne elimina i movimenti contabili').'"> <button type="button" class="btn btn-primary ask tip" data-msg="'.tr('Se riapri questa fattura verrà azzerato lo scadenzario e la prima nota. Continuare?').'" data-method="post" data-op="reopen" data-backto="record-edit" data-title="'.tr('Riaprire la fattura?').'" title="'.tr('Riporta la fattura in stato bozza e ne elimina i movimenti contabili').'">
<i class="fa fa-folder-open"></i> '.tr('Riapri fattura').'... <i class="fa fa-folder-open"></i> '.tr('Riapri fattura').'...
</button>'; </button>';
} }
} }

View File

@ -145,10 +145,6 @@ echo '
echo ' echo '
<script> <script>
function replaceAll(str, find, replace) {
return str.replace(new RegExp(find, "g"), replace);
}
function add_blocco(btn, nome){ function add_blocco(btn, nome){
$("#template .superselect, #template .superselectajax").select2().select2("destroy"); $("#template .superselect, #template .superselectajax").select2().select2("destroy");
var last = $(btn).closest("table").find("tr[id^=last-" + nome + "]").parent().last(); var last = $(btn).closest("table").find("tr[id^=last-" + nome + "]").parent().last();

View File

@ -117,10 +117,6 @@ foreach ($result['altri_dati'] as $dato) {
echo ' echo '
<script> <script>
function replaceAll(str, find, replace) {
return str.replace(new RegExp(find, "g"), replace);
}
var n = '.($key - 1).'; var n = '.($key - 1).';
function add_altri_dati(btn){ function add_altri_dati(btn){
$("#template .superselect, #template .superselectajax").select2().select2("destroy"); $("#template .superselect, #template .superselectajax").select2().select2("destroy");

View File

@ -15,7 +15,7 @@ WHERE co_documenti.id='.prepare($id_record));
if (!empty(setting('Logo stampe'))) { if (!empty(setting('Logo stampe'))) {
$logo_azienda = BASEURL.'/'.Models\Upload::where('filename', setting('Logo stampe'))->first()->fileurl; $logo_azienda = BASEURL.'/'.Models\Upload::where('filename', setting('Logo stampe'))->first()->fileurl;
}else{ } else {
$logo_azienda = str_replace(DOCROOT, BASEURL, App::filepath('templates/base|custom|/logo_azienda.jpg')); $logo_azienda = str_replace(DOCROOT, BASEURL, App::filepath('templates/base|custom|/logo_azienda.jpg'));
$logo_azienda = str_replace('\\', '/', $logo_azienda); $logo_azienda = str_replace('\\', '/', $logo_azienda);
} }

View File

@ -16,20 +16,51 @@ switch (post('op')) {
break; break;
case 'update': case 'update':
$tipo = post('tipo');
$descrizione = post('descrizione');
$iddocumento = post('iddocumento') ?: 0;
// Calcolo il totale da pagare // Calcolo il totale da pagare
$rs = $dbo->fetchArray('SELECT SUM(da_pagare) AS totale_da_pagare, iddocumento FROM co_scadenziario GROUP BY iddocumento HAVING iddocumento=(SELECT iddocumento FROM co_scadenziario s WHERE id='.prepare($id_record).')'); $scadenza = $dbo->fetchOne('SELECT SUM(da_pagare) AS totale_da_pagare, iddocumento FROM co_scadenziario GROUP BY iddocumento HAVING iddocumento=(SELECT iddocumento FROM co_scadenziario s WHERE id='.prepare($id_record).')');
$totale_da_pagare = sum($rs[0]['totale_da_pagare'], null, Settings::get('Cifre decimali per importi')); $totale_da_pagare = sum($scadenza['totale_da_pagare'], null);
$totale_utente = 0; $totale_utente = 0;
// Verifico se il totale sommato è uguale al totale da pagare (solo per le scadenze delle fatture) // Verifico se il totale sommato è uguale al totale da pagare (solo per le scadenze delle fatture)
foreach (post('scadenza') as $idscadenza => $da_pagare) { foreach (post('da_pagare') as $id_scadenza => $da_pagare) {
$totale_utente = sum($totale_utente, $da_pagare); $totale_utente = sum($totale_utente, $da_pagare);
} }
if ($totale_utente == $totale_da_pagare || empty($rs[0]['iddocumento'])) { if ($totale_utente == $totale_da_pagare || empty($scadenza['iddocumento'])) {
foreach (post('scadenza') as $idscadenza => $da_pagare) { foreach (post('da_pagare') as $id => $da_pagare) {
$dbo->query('UPDATE co_scadenziario SET da_pagare='.prepare($da_pagare).', pagato='.prepare(post('pagato')[$idscadenza]).', scadenza='.prepare(post('data')[$idscadenza]).' WHERE id='.prepare($idscadenza)); $pagato = post('pagato')[$id];
$scadenza = post('scadenza')[$id];
$data_concordata = post('data_concordata')[$id];
$nuova = post('nuova')[$id];
if (empty($nuova)) {
$database->update('co_scadenziario', [
'da_pagare' => $da_pagare,
'pagato' => $pagato,
'scadenza' => $scadenza,
'data_concordata' => $data_concordata,
], ['id' => $id]);
if ($da_pagare == 0) {
$database->delete('co_scadenziario', ['id' => $id]);
}
} else {
$database->insert('co_scadenziario', [
'descrizione' => $descrizione,
'tipo' => $tipo,
'iddocumento' => $iddocumento,
'da_pagare' => $da_pagare,
'pagato' => $pagato,
'scadenza' => $scadenza,
'data_concordata' => $data_concordata,
'data_emissione' => date('Y-m-d'),
]);
}
} }
flash()->info(tr('Scadenze aggiornate!')); flash()->info(tr('Scadenze aggiornate!'));

View File

@ -7,10 +7,19 @@ echo '
<input type="hidden" name="op" value="update"> <input type="hidden" name="op" value="update">
<input type="hidden" name="backto" value="record-edit"> <input type="hidden" name="backto" value="record-edit">
<input type="hidden" name="id_record" value="'.$id_record.'"> <input type="hidden" name="id_record" value="'.$id_record.'">
<input type="hidden" name="tipo" value="'.$record['tipo'].'">
<input type="hidden" name="descrizione" value="'.$record['descrizione'].'">
<input type="hidden" name="iddocumento" value="'.$record['iddocumento'].'">
<div class="panel panel-primary"> <div class="panel panel-primary">
<div class="panel-heading"> <div class="panel-heading">
<h3 class="panel-title">'.tr('Dettagli scadenza').'</h3> <h3 class="panel-title">
'.tr('Dettagli scadenza').'
<button type="button" class="btn btn-xs btn-info pull-right" id="add-scadenza">
<i class="fa fa-plus"></i> '.tr('Aggiungi scadenza').'
</button>
</h3>
</div> </div>
<div class="panel-body"> <div class="panel-body">
@ -66,11 +75,16 @@ echo '
<!-- Elenco scadenze --> <!-- Elenco scadenze -->
<div class="col-md-5"> <div class="col-md-5">
<table class="table table-hover table-condensed table-bordered"> <table class="table table-hover table-condensed table-bordered">
<tr> <thead>
<th width="150">'.tr('Data').'</th> <tr>
<th width="150">'.tr('Importo').'</th> <th width="150">'.tr('Data').'</th>
<th width="150">'.tr('Pagato').'</th> <th width="150">'.tr('Importo').'</th>
</tr>'; <th width="150">'.tr('Pagato').'</th>
<th width="150">'.tr('Data concordata').'</th>
</tr>
</thead>
<tbody id="scadenze">';
$totale_da_pagare = 0; $totale_da_pagare = 0;
$totale_pagato = 0; $totale_pagato = 0;
@ -96,18 +110,23 @@ for ($i = 0; $i < count($rs); ++$i) {
echo ' echo '
<tr class="'.$class.'"> <tr class="'.$class.'">
<td align="center"> <td align="center">
{[ "type": "date", "name": "data['.$rs[$i]['id'].']", "value": "'.$rs[$i]['scadenza'].'" ]} {[ "type": "date", "name": "scadenza['.$rs[$i]['id'].']", "value": "'.$rs[$i]['scadenza'].'" ]}
</td> </td>
<td align="right"> <td align="right">
{[ "type": "number", "name": "scadenza['.$rs[$i]['id'].']", "decimals": 2, "value": "'.Translator::numberToLocale($rs[$i]['da_pagare'], 2).'" ]} {[ "type": "number", "name": "da_pagare['.$rs[$i]['id'].']", "decimals": 2, "value": "'.Translator::numberToLocale($rs[$i]['da_pagare'], 2).'", "onchange": "controlloTotale()" ]}
</td> </td>
<td align="right"> <td align="right">
{[ "type": "number", "name": "pagato['.$rs[$i]['id'].']", "decimals": 2, "value": "'.Translator::numberToLocale($rs[$i]['pagato']).'" ]} {[ "type": "number", "name": "pagato['.$rs[$i]['id'].']", "decimals": 2, "value": "'.Translator::numberToLocale($rs[$i]['pagato']).'" ]}
</td> </td>
<td align="center">
{[ "type": "date", "name": "data_concordata['.$rs[$i]['id'].']", "value": "'.$rs[$i]['data_concordata'].'" ]}
</td>
</tr>'; </tr>';
} }
$totale_da_pagare = sum(array_column($rs, 'da_pagare')); $totale_da_pagare = sum(array_column($rs, 'da_pagare'));
$totale_pagato = sum(array_column($rs, 'pagato')); $totale_pagato = sum(array_column($rs, 'pagato'));
@ -121,11 +140,14 @@ $(document).ready(function(){
} }
echo ' echo '
<tr> </tbody>
<td align="right"><b>'.tr('Totale').'</b></td> <tfoot>
<td align="right" id="totale_utente">'.Translator::numberToLocale($totale_da_pagare).'</td> <tr>
<td align="right"></td> <td align="right"><b>'.tr('Totale').'</b></td>
</tr>'; <td align="right" id="totale_utente">'.Translator::numberToLocale($totale_da_pagare).'</td>
<td align="right"></td>
</tr>
</tfoot>';
?> ?>
@ -150,8 +172,6 @@ echo '
</div> </div>
</div> </div>
</div> </div>
<div class="clearfix"></div>
</form> </form>
{( "name": "log_email", "id_module": "$id_module$", "id_record": "$id_record$" )} {( "name": "log_email", "id_module": "$id_module$", "id_record": "$id_record$" )}
@ -164,59 +184,88 @@ if ($records[0]['iddocumento'] == 0) {
</a> </a>
<?php <?php
} }
echo '
<table class="hide">
<tbody id="scadenza-template">
<tr class="danger">
<input type="hidden" name="nuova[-id-]" value="1">
<td align="center">
{[ "type": "date", "name": "scadenza[-id-]" ]}
</td>
<td align="right">
{[ "type": "number", "name": "da_pagare[-id-]", "decimals": 2, "onchange": "controlloTotale()" ]}
</td>
<td align="right">
{[ "type": "number", "name": "pagato[-id-]", "decimals": 2 ]}
</td>
<td align="center">
{[ "type": "date", "name": "data_concordata[-id-]" ]}
</td>
</tr>
</tbody>
</table>
<script>
var i = '.$i.';
$(document).on("click", "#add-scadenza", function(){
i++;
var text = replaceAll($("#scadenza-template").html(), "-id-", "" + i);
$("#scadenze").append(text);
start_datepickers();
});
</script>';
?> ?>
<script> <script>
globals.cifre_decimali = 2; globals.cifre_decimali = 2;
$(document).ready(function(){ $(document).ready(function(){
totale_ok(); controlloTotale();
<?php <?php
if ($dir == 'uscita') { if ($dir == 'uscita') {
echo ' echo '
$("#email-button").remove();'; $("#email-button").remove();';
} }
if ($record['iddocumento'] != 0) {
?>
$('input[name*=scadenza]').keyup( function(){ totale_ok(); } );
<?php
}
?> ?>
}); });
function totale_ok(){ function controlloTotale() {
totale_da_pagare = $('#totale_da_pagare').val().toEnglish(); totale_da_pagare = $('#totale_da_pagare').val().toEnglish();
totale_utente = 0; totale_utente = 0;
$('input[name*=scadenza]').each( function(){ $('input[name*=da_pagare]').each(function() {
totale_utente += $(this).val().toEnglish();
});
if( isNaN(totale_utente) ){ totale_utente += $(this).val().toEnglish();
totale_utente = 0;
}
totale_utente = Math.round(totale_utente*100)/100; });
totale_da_pagare = Math.round(totale_da_pagare*100)/100;
if (isNaN(totale_utente)) {
totale_utente = 0;
}
totale_utente = Math.round(totale_utente * 100) / 100;
totale_da_pagare = Math.round(totale_da_pagare * 100) / 100;
diff = Math.abs(totale_da_pagare) - Math.abs(totale_utente); diff = Math.abs(totale_da_pagare) - Math.abs(totale_utente);
if( diff == 0 ){ if (diff == 0) {
$('#btn-saves').removeClass('hide'); $('#btn-saves').removeClass('hide');
$('#totale').addClass('hide'); $('#totale').addClass('hide');
} } else {
$('#btn-saves').addClass('hide');
$('#totale').removeClass('hide');
}
else{ $('#diff').html(diff.toLocale());
$('#btn-saves').addClass('hide'); $('#totale_utente').html(totale_utente.toLocale());
$('#totale').removeClass('hide'); }
}
$('#diff').html(diff.toLocale());
$('#totale_utente').html(totale_utente.toLocale());
}
</script> </script>

View File

@ -49,8 +49,9 @@ switch (filter('op')) {
$utente->email = $email; $utente->email = $email;
$cambia_password = filter('change_password'); $cambia_password = filter('change_password');
if (!empty($cambia_password)) if (!empty($cambia_password)) {
$utente->password = $password; $utente->password = $password;
}
} else { } else {
$utente = User::build($username, $email, $password); $utente = User::build($username, $email, $password);
} }

View File

@ -7,7 +7,7 @@ $_SESSION['superselect']['idanagrafica'] = $utente['id_anagrafica'];
echo ' echo '
<div class="row"> <div class="row">
<div class="col-md-12"> <div class="col-md-12">
{[ "type": "text", "label": "'.tr('Username').'", "name": "username", "required": 1, "value": "'.$utente['username'].'", "validation": "username||'.($utente['id']?:0).'" ]} {[ "type": "text", "label": "'.tr('Username').'", "name": "username", "required": 1, "value": "'.$utente['username'].'", "validation": "username||'.($utente['id'] ?: 0).'" ]}
</div> </div>
</div>'; </div>';

View File

@ -42,7 +42,7 @@ if (!empty($user)) {
echo ' echo '
<div class="row"> <div class="row">
<div class="col-md-12"> <div class="col-md-12">
{[ "type": "checkbox", "label": "' . tr('Cambia password') . '", "name": "change_password", "value": "1" ]} {[ "type": "checkbox", "label": "'.tr('Cambia password').'", "name": "change_password", "value": "1" ]}
</div> </div>
</div> </div>

View File

@ -130,9 +130,5 @@ function testQuery(){
} }
}) })
} }
function replaceAll(str, find, replace) {
return str.replace(new RegExp(find, "g"), replace);
}
</script>'; </script>';
} }

View File

@ -466,7 +466,7 @@ class Auth extends \Util\Singleton
if (!empty($results)) { if (!empty($results)) {
$this->user = User::with('group')->find($user_id); $this->user = User::with('group')->find($user_id);
if(!API::isAPIRequest() && !empty($this->user->reset_token)) { if (!API::isAPIRequest() && !empty($this->user->reset_token)) {
$this->user->reset_token = null; $this->user->reset_token = null;
$this->user->save(); $this->user->save();
} }

View File

@ -182,4 +182,9 @@ HAVING 2=2
ORDER BY `scadenza` ASC' WHERE `name` = 'Scadenzario'; ORDER BY `scadenza` ASC' WHERE `name` = 'Scadenzario';
-- Aggiunte impostazione Autocomple web form -- Aggiunte impostazione Autocomple web form
INSERT INTO `zz_settings` (`id`, `nome`, `valore`, `tipo`, `editable`, `sezione`, `order`, `help`) VALUES (NULL, 'Autocompletamento form', 'on', 'list[on,off]', '1', 'Generali', '', NULL); INSERT INTO `zz_settings` (`id`, `nome`, `valore`, `tipo`, `editable`, `sezione`, `order`, `help`) VALUES (NULL, 'Autocompletamento form', 'on', 'list[on,off]', '1', 'Generali', '', NULL);
-- Data concordata per le scadenza
ALTER TABLE `co_scadenziario` ADD `data_concordata` DATE;
UPDATE `zz_views` SET `query` = 'IF(pagato = da_pagare, ''#38CD4E'', IF(data_concordata IS NOT NULL AND data_concordata > NOW(), '' #CC9837'', IF(scadenza < NOW(), ''#CC4D37'', '''')))' WHERE `id_module` = (SELECT `id` FROM `zz_modules` WHERE `name` = 'Scadenzario') AND `name` = '_bg_';