1
0
mirror of https://github.com/devcode-it/openstamanager.git synced 2025-06-05 22:09:38 +02:00

Correzioni previste da #265 (#670)

* Correzioni previste da #265
* Correzioni visualizzazione mastrini
* Correzioni visualizazzione stampa mastrino
This commit is contained in:
Thomas Zilio
2019-11-22 17:15:17 +01:00
committed by GitHub
parent b32a08d196
commit 88732984f3
7 changed files with 322 additions and 211 deletions

View File

@@ -48,6 +48,7 @@ foreach ($id_scadenze as $id_scadenza) {
$righe_documento = [];
$righe_documento[] = [
'iddocumento' => null,
'id_scadenza' => $scadenza['id'],
'id_conto' => null,
'dare' => ($dir == 'entrata') ? 0 : $scadenza['rata'],
@@ -55,6 +56,7 @@ foreach ($id_scadenze as $id_scadenza) {
];
$righe_documento[] = [
'iddocumento' => null,
'id_scadenza' => $scadenza['id'],
'id_conto' => $id_conto_controparte,
'dare' => ($dir == 'entrata') ? $scadenza['rata'] : 0,
@@ -78,9 +80,7 @@ $numeri = [];
$counter = 0;
$id_documenti = array_unique($id_documenti);
$idanagrafica_mov = 0;
$id_anagrafica_movimenti = null;
foreach ($id_documenti as $id_documento) {
$fattura = Fattura::find($id_documento);
$tipo = $fattura->tipo;
@@ -92,10 +92,10 @@ foreach ($id_documenti as $id_documento) {
continue;
}
if ($fattura->idanagrafica != $idanagrafica_mov && $idanagrafica_mov != '') {
$idanagrafica_mov = 0;
} else {
$idanagrafica_mov = $fattura->idanagrafica;
if(empty($id_anagrafica_movimenti)){
$id_anagrafica_movimenti = $fattura->idanagrafica;
}elseif ($fattura->idanagrafica != $id_anagrafica_movimenti) {
$id_anagrafica_movimenti = null;
}
$numeri[] = !empty($fattura['numero_esterno']) ? $fattura['numero_esterno'] : $fattura['numero'];
@@ -111,11 +111,7 @@ foreach ($id_documenti as $id_documento) {
$id_conto_controparte = $fattura->anagrafica[$conto_field];
// Lettura delle scadenza della fattura
if (sizeof($id_scadenze) > 0) {
$scadenze = $dbo->fetchArray('SELECT id, ABS(da_pagare - pagato) AS rata FROM co_scadenziario WHERE iddocumento='.prepare($id_documento).' AND ABS(da_pagare) > ABS(pagato) AND id IN("'.implode('","', $id_scadenze).'") ORDER BY YEAR(scadenza) ASC, MONTH(scadenza) ASC');
} else {
$scadenze = $dbo->fetchArray('SELECT id, ABS(da_pagare - pagato) AS rata FROM co_scadenziario WHERE iddocumento='.prepare($id_documento).' AND ABS(da_pagare) > ABS(pagato) ORDER BY YEAR(scadenza) ASC, MONTH(scadenza) ASC');
}
$scadenze = $dbo->fetchArray('SELECT id, ABS(da_pagare - pagato) AS rata, iddocumento FROM co_scadenziario WHERE iddocumento='.prepare($id_documento).' AND ABS(da_pagare) > ABS(pagato) ORDER BY YEAR(scadenza) ASC, MONTH(scadenza) ASC');
// Selezione prima scadenza
if ($singola_scadenza && !empty($scadenze)) {
@@ -124,27 +120,10 @@ foreach ($id_documenti as $id_documento) {
$righe_documento = [];
// Riga aziendale
$totale = sum(array_column($scadenze, 'rata'));
if ($totale != 0) {
if ($nota_credito) {
$totaleA = -$totale;
} else {
$totaleA = $totale;
}
$righe_azienda[] = [
'id_scadenza' => $scadenze[0]['id'],
'id_conto' => $id_conto_aziendale,
'dare' => ($dir == 'entrata') ? $totaleA : 0,
'avere' => ($dir == 'entrata') ? 0 : $totaleA,
];
}
// Riga controparte
foreach ($scadenze as $scadenza) {
$righe_documento[] = [
'iddocumento' => $scadenza['iddocumento'],
'id_scadenza' => $scadenza['id'],
'id_conto' => $id_conto_controparte,
'dare' => ($dir == 'entrata' && !$nota_credito && !$is_insoluto) ? 0 : $scadenza['rata'],
@@ -152,37 +131,57 @@ foreach ($id_documenti as $id_documento) {
];
}
// Riga aziendale
$totale = sum(array_column($scadenze, 'rata'));
if ($totale != 0) {
if ($nota_credito) {
$totale_rata = -$totale;
} else {
$totale_rata = $totale;
}
$righe_documento[] = [
'iddocumento' => $scadenze[0]['iddocumento'],
'id_scadenza' => $scadenze[0]['id'],
'id_conto' => $id_conto_aziendale,
'dare' => ($dir == 'entrata') ? $totale_rata : 0,
'avere' => ($dir == 'entrata') ? 0 : $totale_rata,
];
}
$righe = array_merge($righe, $righe_documento);
}
/*
$k = 0;
foreach ($righe_azienda as $key => $riga_azienda) {
if ($righe_azienda[$key]['id_conto'] != $righe_azienda[$key - 1]['id_conto']) {
++$k;
}
$riga_documento[$k]['iddocumento'] = $riga_azienda['iddocumento'];
$riga_documento[$k]['id_scadenza'] = $riga_azienda['id_scadenza'];
$riga_documento[$k]['id_conto'] = $riga_azienda['id_conto'];
$riga_documento[$k]['dare'] += $riga_azienda['dare'];
$riga_documento[$k]['avere'] += $riga_azienda['avere'];
}
$righe = array_merge($righe, $righe_azienda);
}*/
foreach ($riga_documento as $key => $value) {
//Inverto dare e avere per importi negativi
if ($riga_documento[$key]['dare'] < 0 || $riga_documento[$key]['avere'] < 0) {
$tmp = abs($riga_documento[$key]['dare']);
$riga_documento[$key]['dare'] = abs($riga_documento[$key]['avere']);
$riga_documento[$key]['avere'] = $tmp;
// Inverto dare e avere per importi negativi
foreach ($righe as $key => $value) {
if ($righe[$key]['dare'] < 0 || $righe[$key]['avere'] < 0) {
$tmp = abs($righe[$key]['dare']);
$righe[$key]['dare'] = abs($righe[$key]['avere']);
$righe[$key]['avere'] = $tmp;
}
}
$righe = array_merge($righe, $riga_documento);
// Descrizione
$numero_scadenze = count($id_scadenze);
$numero_documenti = count($id_documenti);
if ($numero_documenti + $numero_scadenze > 1) {
if ($idanagrafica_mov != 0) {
$an = Anagrafica::find($idanagrafica_mov);
if (!empty($id_anagrafica_movimenti)) {
$an = Anagrafica::find($id_anagrafica_movimenti);
$descrizione = 'Pag. fatture '.$an->ragione_sociale.' num. '.implode(', ', $numeri);
} else {
@@ -280,7 +279,7 @@ include $structure->filepath('movimenti.php');
$(document).ready(function(e) {
$("#bs-popup #add-form").on("submit", function(e) {
return calcolaBilancio();
return controllaConti();
});
$('#bs-popup #modello_primanota').change(function() {

View File

@@ -66,7 +66,7 @@ include $structure->filepath('movimenti.php');
<script>
$("#edit-form").submit(function(e) {
return calcolaBilancio();
return controllaConti();
});
</script>

View File

@@ -2,115 +2,262 @@
include_once __DIR__.'/../../core.php';
echo '
<table class="table table-striped table-condensed table-hover table-bordered"
<tr>
<th>'.tr('Conto').'</th>
<th width="20%">'.tr('Dare').'</th>
<th width="20%">'.tr('Avere').'</th>
</tr>';
$max = max(count($righe), 10);
for ($i = 0; $i < $max; ++$i) {
$required = ($i <= 1);
$riga = $righe[$i];
use Modules\Fatture\Fattura;
function renderRiga($id, $riga)
{
// Conto
echo '
<tr>
<input type="hidden" name="id_scadenza['.$i.']" value="'.$riga['id_scadenza'].'">
<td>
{[ "type": "select", "name": "idconto['.$i.']", "id": "conto'.$i.'", "value": "'.($riga['id_conto'] ?: '').'", "ajax-source": "conti", "required": "'.$required.'" ]}
</td>';
<tr>
<input type="hidden" name="id_scadenza['.$id.']" value="'.$riga['id_scadenza'].'">
<td>
{[ "type": "select", "name": "idconto['.$id.']", "id": "conto'.$id.'", "value": "'.($riga['id_conto'] ?: '').'", "ajax-source": "conti" ]}
</td>';
// Dare
echo '
<td>
{[ "type": "number", "name": "dare['.$i.']", "id": "dare'.$i.'", "value": "'.($riga['dare'] ?: 0).'" ]}
</td>';
<td>
{[ "type": "number", "name": "dare['.$id.']", "id": "dare'.$id.'", "value": "'.($riga['dare'] ?: 0).'" ]}
</td>';
// Avere
echo '
<td>
{[ "type": "number", "name": "avere['.$i.']", "id": "avere'.$i.'", "value": "'.($riga['avere'] ?: 0).'" ]}
</td>
</tr>';
<td>
{[ "type": "number", "name": "avere['.$id.']", "id": "avere'.$id.'", "value": "'.($riga['avere'] ?: 0).'" ]}
</td>
</tr>';
}
// Totale per controllare sbilancio
echo '
function renderTabella($nome, $righe, $id_scadenza_default = null)
{
global $counter;
echo '
<div class="raggruppamento_primanota" data-id_scadenza="'.$id_scadenza_default.'">
<button class="btn btn-info btn-xs pull-right" type="button" onclick="addRiga(this)">
<i class="fa fa-plus"></i> '.tr('Aggiungi').'
</button>
<h4>'.$nome.'</h4>
<table class="table table-striped table-condensed table-hover table-bordered scadenze">
<thead>
<tr>
<th>'.tr('Conto').'</th>
<th width="20%">'.tr('Dare').'</th>
<th width="20%">'.tr('Avere').'</th>
</tr>
</thead>
<tbody>';
foreach ($righe as $riga) {
renderRiga($counter++, $riga);
}
// Totale per controllare sbilancio
echo '
</tbody>
<tfoot>
<tr>
<td align="right"><b>'.tr('Totale').':</b></td>';
// Totale dare
echo '
// Totale dare
echo '
<td align="right">
<span><span id="totale_dare"></span> '.currency().'</span>
<span class="totale_dare"></span> '.currency().'
</td>';
// Totale avere
echo '
// Totale avere
echo '
<td align="right">
<span><span id="totale_avere"></span> '.currency().'</span>
<span class="totale_avere"></span> '.currency().'
</td>
</tr>';
// Verifica sbilancio
echo '
</tfoot>
</table>';
// Verifica dello sbilancio
echo '
<div class="alert alert-warning hide sbilancio">
<i class="fa fa-warning"></i> '.tr('Sbilancio di _MONEY_', [
'_MONEY_' => '<span class="money"></span> '.currency(),
]).'
</div>
</div>';
}
$counter = 0;
$righe = collect($righe);
// Elenco per documenti
$scadenze = $righe
->where('iddocumento', '<>', '')
->groupBy('iddocumento');
foreach ($scadenze as $id_documento => $righe) {
$documento = Fattura::find($id_documento);
$nome = tr('Documento num. _NUM_', [
'_NUM_' => $documento['numero_esterno'] ?: $documento['numero'],
]);
renderTabella($nome, $righe, $righe->first()['id_scadenza']);
}
// Elenco per scadenze
$scadenze = $righe
->where('iddocumento', '=', '')
->where('id_scadenza', '<>', '')
->groupBy('id_scadenza');
foreach ($scadenze as $id_scadenza => $righe) {
$nome = tr('Scadenza num. _ID_', [
'_ID_' => $id_scadenza,
]);
renderTabella($nome, $righe, $righe->first()['id_scadenza']);
}
// Elenco generale
$righe_generali = $righe
->where('iddocumento', '=', '')
->where('id_scadenza', '=', '');
if ($righe_generali->isEmpty()) {
$righe_generali->push([]);
$righe_generali->push([]);
}
$nome = tr('Generale');
renderTabella($nome, $righe_generali);
// Nuova riga
echo '
<tr>
<td align="right"></td>
<td colspan="2" align="center">
<span id="testo_aggiuntivo"></span>
</td>
</tr>
</table>';
<table class="hide">
<tbody id="template">';
renderRiga('-id-', [
'id_scadenza' => '-id_scadenza-',
]);
echo '
</tbody>
</table>';
echo '
<script>
var formatted_zero = "'.Translator::numberToLocale(0).'";
var sbilancio = "'.tr('sbilancio di _NUM_', [
'_NUM_' => '|value| '.currency(),
]).'";
var n = '.$counter.';
// Ad ogni modifica dell\'importo verifica che siano stati selezionati: il conto, la causale, la data. Inoltre aggiorna lo sbilancio
function calcolaBilancio() {
bilancio = 0.00;
totale_dare = 0.00;
totale_avere = 0.00;
function addRiga(btn) {
var raggruppamento = $(btn).parent();
console.log(raggruppamento)
n++;
cleanup_inputs();
// Calcolo il totale dare e totale avere
$("input[id*=dare]").each(function() {
valore = $(this).val() ? $(this).val().toEnglish() : 0;
var tabella = raggruppamento.find("tbody");
var content = $("#template").html();
content = content.replace("-id_scadenza-", raggruppamento.data("id_scadenza"));
var text = replaceAll(content, "-id-", "" + n);
tabella.append(text);
restart_inputs();
}
totale_dare += Math.round(valore * 100) / 100;
/**
* Funzione per controllare lo stato dei conti della prima nota.
*
* @returns {boolean}
*/
function controllaConti() {
var continuare = true;
// Controlli sullo stato dei raggruppamenti
$(".raggruppamento_primanota").each(function() {
var bilancio = calcolaBilancio(this);
continuare &= bilancio == 0;
});
// Blocco degli input con valore non impostato
$("input[id*=dare], input[id*=avere]").each(function() {
var conto_relativo = $(this).parent().parent().find("select").val();
if (!conto_relativo) {
$(this).prop("disabled", true);
}
if ($(this).val().toEnglish()){
continuare &= conto_relativo ? true : false;
}
});
$("input[id*=avere]").each(function() {
valore = $(this).val() ? $(this).val().toEnglish() : 0;
totale_avere += Math.round(valore * 100) / 100;
});
$("#totale_dare").text(totale_dare.toLocale());
$("#totale_avere").text(totale_avere.toLocale());
bilancio = Math.round(totale_dare * 100) / 100 - Math.round(totale_avere * 100) / 100;
if (bilancio == 0) {
$("#testo_aggiuntivo").removeClass("text-danger").html(\'\');
if (continuare) {
$("#add-submit").removeClass("hide");
$("#btn_crea_modello").removeClass("hide");
} else {
$("#testo_aggiuntivo").addClass("text-danger").html(sbilancio.replace("|value|", bilancio.toLocale()));
} else {
$("#add-submit").addClass("hide");
$("#btn_crea_modello").addClass("hide");
}
return bilancio == 0;
return continuare;
}
function bloccaZeri(){
/**
* Ad ogni modifica dell\'importo verifica che siano stati selezionati: il conto, la causale, la data.
* Inoltre aggiorna lo sbilancio.
*
* @param gruppo
* @returns {number}
*/
function calcolaBilancio(gruppo) {
var raggruppamento = $(gruppo);
var totale_dare = 0.00;
var totale_avere = 0.00;
// Calcolo il totale dare
raggruppamento.find("input[id*=dare]").each(function() {
valore = $(this).val() ? $(this).val().toEnglish() : 0;
totale_dare += valore;
});
// Calcolo il totale avere
raggruppamento.find("input[id*=avere]").each(function() {
valore = $(this).val() ? $(this).val().toEnglish() : 0;
totale_avere += valore;
});
// Visualizzazione dei totali
raggruppamento.find(".totale_dare").text(totale_dare.toLocale());
raggruppamento.find(".totale_avere").text(totale_avere.toLocale());
// Calcolo il bilancio
var bilancio = totale_dare - totale_avere;
// Visualizzazione dello sbilancio eventuale
var sbilancio = raggruppamento.find(".sbilancio");
var valore_sbilancio = sbilancio.find(".money");
valore_sbilancio.text(bilancio.toLocale());
if (bilancio == 0) {
sbilancio.addClass("hide");
} else {
sbilancio.removeClass("hide");
}
return bilancio;
}
$(document).ready(function() {
controllaConti();
// Fix per l\'inizializzazione degli input
$("input[id*=dare], input[id*=avere]").each(function() {
if ($(this).val() == formatted_zero) {
$(this).prop("disabled", true);
@@ -118,52 +265,42 @@ function bloccaZeri(){
$(this).prop("disabled", false);
}
});
}
$(document).ready(function() {
calcolaBilancio();
bloccaZeri();
$("select").on("change", function() {
if ($(this).parent().parent().find("input[disabled]").length != 1) {
if ($(this).val()) {
$(this).parent().parent().find("input").prop("disabled", false);
} else {
$(this).parent().parent().find("input").prop("disabled", true);
$(this).parent().parent().find("input").val("0.00");
}
}
});
$("input[id*=dare]").on("keyup change", function() {
if (!$(this).prop("disabled")) {
if ($(this).val()) {
$(this).parent().parent().find("input[id*=avere]").prop("disabled", true);
} else {
$(this).parent().parent().find("input[id*=avere]").prop("disabled", false);
}
calcolaBilancio();
}
});
$("input[id*=avere]").on("keyup change", function() {
if (!$(this).prop("disabled")) {
if ($(this).val()) {
$(this).parent().parent().find("input[id*=dare]").prop("disabled", true);
} else {
$(this).parent().parent().find("input[id*=dare]").prop("disabled", false);
}
calcolaBilancio();
}
});
// Trigger dell"evento keyup() per la prima volta, per eseguire i dovuti controlli nel caso siano predisposte delle righe in prima nota
// Trigger dell\'evento keyup() per la prima volta, per eseguire i dovuti controlli nel caso siano predisposte delle righe in prima nota
$("input[id*=dare][value!=\'\'], input[id*=avere][value!=\'\']").keyup();
$("select[id*=idconto]").click(function() {
$("input[id*=dare][value!=\'\'], input[id*=avere][value!=\'\']").keyup();
});
});
$(document).on("change", "select", function() {
var row = $(this).parent().parent();
if ($(this).parent().parent().find("input[disabled]").length != 1) {
row.find("input").prop("disabled", $(this).val() ? false : true);
}
controllaConti();
});
$(document).on("keyup change", "input[id*=dare]", function() {
var row = $(this).parent().parent();
if (!$(this).prop("disabled")) {
row.find("input[id*=avere]").prop("disabled", $(this).val() ? true : false);
controllaConti();
}
});
$(document).on("keyup change", "input[id*=avere]", function() {
var row = $(this).parent().parent();
if (!$(this).prop("disabled")) {
row.find("input[id*=dare]").prop("disabled", $(this).val() ? true : false);
controllaConti();
}
});
</script>';