From 0396f9c3efaeb544f52523257206f674f72d20b7 Mon Sep 17 00:00:00 2001 From: Thomas Zilio Date: Mon, 8 Jul 2019 15:48:48 +0200 Subject: [PATCH] Piano dei conti AJAX --- modules/anagrafiche/src/Anagrafica.php | 28 +- modules/partitario/dettagli_conto.php | 79 ++++ modules/partitario/dettagli_movimento.php | 32 +- modules/partitario/edit.php | 453 ++++++++++++---------- 4 files changed, 350 insertions(+), 242 deletions(-) create mode 100644 modules/partitario/dettagli_conto.php diff --git a/modules/anagrafiche/src/Anagrafica.php b/modules/anagrafiche/src/Anagrafica.php index f67211615..fc639e843 100644 --- a/modules/anagrafiche/src/Anagrafica.php +++ b/modules/anagrafiche/src/Anagrafica.php @@ -5,6 +5,7 @@ namespace Modules\Anagrafiche; use Common\Model; use Illuminate\Database\Eloquent\SoftDeletes; use Modules\Fatture\Fattura; +use Modules\TipiIntervento\Tipo as TipoSessione; use Settings; use Traits\RecordTrait; use Util\Generator; @@ -116,23 +117,22 @@ class Anagrafica extends Model { $database = database(); - // Copio le tariffe per le varie attività - $query = 'INSERT INTO in_tariffe(idtecnico, idtipointervento, costo_ore, costo_km, costo_dirittochiamata, costo_ore_tecnico, costo_km_tecnico, costo_dirittochiamata_tecnico) SELECT '.prepare($anagrafica->id).', idtipointervento, costo_orario, costo_km, costo_diritto_chiamata, costo_orario_tecnico, costo_km_tecnico, costo_diritto_chiamata_tecnico FROM in_tipiintervento'; - $presenti = $database->fetchArray('SELECT idtipointervento AS id FROM in_tariffe WHERE idtecnico = '.prepare($anagrafica->id)); - if (!empty($presenti)) { - $list = []; - foreach ($presenti as $presente) { - $list[] = prepare($presente['id']); - } - $query .= ' WHERE idtipointervento NOT IN ('.implode($list, ',').')'; - } + // Aggiunta associazioni costi unitari al contratto + $tipi = TipoSessione::whereNotIn('idtipointervento', array_column($presenti, 'id'))->get(); - $result = database()->query($query); - - if (!$result) { - flash()->error(tr("Errore durante l'importazione tariffe!")); + foreach ($tipi as $tipo) { + $database->insert('in_tariffe', [ + 'idtecnico' => $anagrafica->id, + 'idtipointervento' => $tipo->id, + 'costo_ore' => $tipo->costo_orario, + 'costo_km' => $tipo->costo_km, + 'costo_dirittochiamata' => $tipo->costo_diritto_chiamata, + 'costo_ore_tecnico' => $tipo->costo_orario_tecnico, + 'costo_km_tecnico' => $tipo->costo_km_tecnico, + 'costo_dirittochiamata_tecnico' => $tipo->costo_diritto_chiamata_tecnico, + ]); } } diff --git a/modules/partitario/dettagli_conto.php b/modules/partitario/dettagli_conto.php new file mode 100644 index 000000000..ac01b16d4 --- /dev/null +++ b/modules/partitario/dettagli_conto.php @@ -0,0 +1,79 @@ += ".prepare($_SESSION['period_start'])." AND co_movimenti.data <= ".prepare($_SESSION['period_end'])." ORDER BY co_movimenti.data DESC"; +$movimenti = $dbo->fetchArray($query); + +if (!empty($movimenti)) { + echo ' + + + + + + + '; + + // Elenco righe del partitario + foreach ($movimenti as $movimento) { + echo ' + + "; + + // Data + echo ' + '; + + // Dare + if ($movimento['totale'] > 0) { + echo ' + + '; + } + + // Avere + else { + echo ' + + '; + } + + echo ' + '; + } + + echo ' +
'.tr('Causale').''.tr('Data').''.tr('Dare').''.tr('Avere').'
'; + + if (!empty($movimento['iddocumento'])) { + $modulo_fattura = ($movimento['dir'] == 'entrata') ? Modules::get('Fatture di vendita')['id'] : Modules::get('Fatture di acquisto')['id']; + + echo ' + '.$movimento['descrizione'].''; + } else { + echo ' + '.$movimento['descrizione'].''; + } + + echo " + + '.dateFormat($movimento['data']).' + + '.moneyFormat(abs($movimento['totale']), 2).' + + '.moneyFormat(abs($movimento['totale']), 2).' +
+ +'; +} diff --git a/modules/partitario/dettagli_movimento.php b/modules/partitario/dettagli_movimento.php index ff202adf4..294638c46 100644 --- a/modules/partitario/dettagli_movimento.php +++ b/modules/partitario/dettagli_movimento.php @@ -3,41 +3,37 @@ include_once __DIR__.'/../../core.php'; $id_movimento = get('id_movimento'); -$id_conto = get('id_conto'); -$query = 'SELECT *, (subtotale-sconto) AS imponibile, (co_movimenti.descrizione) AS desc_fatt, (co_righe_documenti.descrizione) AS desc_riga FROM co_movimenti INNER JOIN co_righe_documenti ON co_movimenti.iddocumento = co_righe_documenti.iddocumento WHERE co_movimenti.id = '.prepare($id_movimento).' AND co_movimenti.idconto = '.prepare($id_conto); -$rs = $dbo->fetchArray($query); +$query = 'SELECT *, (subtotale-sconto) AS imponibile, (co_movimenti.descrizione) AS desc_fatt, (co_righe_documenti.descrizione) AS desc_riga FROM co_movimenti INNER JOIN co_righe_documenti ON co_movimenti.iddocumento = co_righe_documenti.iddocumento WHERE co_movimenti.id = '.prepare($id_movimento); +$righe = $dbo->fetchArray($query); echo ' - - + + '; -$totale_imponibile = 0; - -for ($i = 0; $i < sizeof($rs); ++$i) { - echo ' + foreach ($righe as $riga) { + echo ' '; + } - $totale_imponibile += $rs[$i]['imponibile']; - $totale_qta += $rs[$i]['qta']; -} + $totale_imponibile = sum(array_column($righe, 'imponibile')); -echo ' + echo ' - - + +
'.tr('Descrizione riga').''.tr('Imponibile').'' . tr('Descrizione riga') . '' . tr('Imponibile') . '
- '.$rs[$i]['desc_riga'].' + ' . $riga['desc_riga'] . ' - '.moneyFormat($rs[$i]['imponibile']).' + ' . moneyFormat($riga['imponibile']) . '
'.tr('Totali').': '.moneyFormat($totale_imponibile).'' . tr('Totali') . ': ' . moneyFormat($totale_imponibile) . '
-
'.$rs[0]['desc_fatt'].''; +'.Modules::link($id_module, $righe[0]['iddocumento'], $righe[0]['desc_fatt'], null, 'class="btn btn-info btn-block"'); diff --git a/modules/partitario/edit.php b/modules/partitario/edit.php index ccbcfc8f6..286982e83 100644 --- a/modules/partitario/edit.php +++ b/modules/partitario/edit.php @@ -2,200 +2,146 @@ include_once __DIR__.'/../../core.php'; -/** - * Elenco conti. - */ -$query1 = 'SELECT * FROM `co_pianodeiconti1` ORDER BY id DESC'; -$rs1 = $dbo->fetchArray($query1); -$n1 = sizeof($rs1); - // Livello 1 -for ($x = 0; $x < $n1; ++$x) { +$query1 = 'SELECT * FROM `co_pianodeiconti1` ORDER BY id DESC'; +$primo_livello = $dbo->fetchArray($query1); + +foreach ($primo_livello as $conto_primo){ $totale_attivita = []; $totale_passivita = []; $costi = []; $ricavi = []; + + $titolo = $conto_primo['descrizione'] == 'Economico' ? tr('Conto economico') :tr('Stato patrimoniale'); - if ($rs1[$x]['descrizione'] == 'Economico') { - echo "

Conto economico

\n"; - } else { - echo "

Stato patrimoniale

\n"; - } - - echo "

\n"; - echo Prints::getLink('Mastrino', $rs1[$x]['id'], null, tr('Stampa'), null, 'lev=1'); - echo "
\n"; - echo "
\n"; + echo ' +
+

'.$titolo.'

+
+
'.Prints::getLink('Mastrino', $conto_primo['id'], null, tr('Stampa'), null, 'lev=1').' +
+
+ +
'; // Livello 2 - $query2 = "SELECT * FROM `co_pianodeiconti2` WHERE idpianodeiconti1='".$rs1[$x]['id']."' ORDER BY numero ASC"; - $rs2 = $dbo->fetchArray($query2); - $n2 = sizeof($rs2); + $query2 = "SELECT * FROM `co_pianodeiconti2` WHERE idpianodeiconti1='".$conto_primo['id']."' ORDER BY numero ASC"; + $secondo_livello = $dbo->fetchArray($query2); - echo "
\n"; - - for ($y = 0; $y < $n2; ++$y) { + foreach ($secondo_livello as $conto_secondo){ // Livello 2 - echo "
\n"; - - // Stampa mastrino - echo Prints::getLink('Mastrino', $rs2[$y]['id'], 'btn-info btn-xs', '', null, 'lev=2'); - - echo ' '.$rs2[$y]['numero'].' '.htmlentities($rs2[$y]['descrizione'], ENT_QUOTES, 'ISO-8859-1')."
\n"; - - echo "
\n"; - + echo ' +
+ '.Prints::getLink('Mastrino', $conto_secondo['id'], 'btn-info btn-xs', '', null, 'lev=2').' + '.$conto_secondo['numero'].' '.$conto_secondo['descrizione'].'
+
+ +
+ '; + // Livello 3 - $query3 = 'SELECT `co_pianodeiconti3`.*, `clienti`.`idanagrafica` AS id_cliente, `fornitori`.`idanagrafica` AS id_fornitore FROM `co_pianodeiconti3` LEFT OUTER JOIN `an_anagrafiche` `clienti` ON `clienti`.`idconto_cliente` = `co_pianodeiconti3`.`id` LEFT OUTER JOIN `an_anagrafiche` `fornitori` ON `fornitori`.`idconto_fornitore` = `co_pianodeiconti3`.`id` WHERE `idpianodeiconti2` = '.prepare($rs2[$y]['id']).' ORDER BY numero ASC'; - $rs3 = $dbo->fetchArray($query3); - $n3 = sizeof($rs3); - - echo "
\n"; - echo "
\n"; - - for ($z = 0; $z < $n3; ++$z) { - $totale_conto_liv3 = []; + $query3 = 'SELECT `co_pianodeiconti3`.*, `clienti`.`idanagrafica` AS id_cliente, `fornitori`.`idanagrafica` AS id_fornitore FROM `co_pianodeiconti3` LEFT OUTER JOIN `an_anagrafiche` `clienti` ON `clienti`.`idconto_cliente` = `co_pianodeiconti3`.`id` LEFT OUTER JOIN `an_anagrafiche` `fornitori` ON `fornitori`.`idconto_fornitore` = `co_pianodeiconti3`.`id` WHERE `idpianodeiconti2` = '.prepare($conto_secondo['id']).' ORDER BY numero ASC'; + $terzo_livello = $dbo->fetchArray($query3); + foreach ($terzo_livello as $conto_terzo){ // Se il conto non ha documenti collegati posso eliminarlo - $query = "SELECT id FROM co_movimenti WHERE idconto='".$rs3[$z]['id']."'"; - $nr = $dbo->fetchNum($query); + $numero_movimenti = $dbo->fetchNum("SELECT id FROM co_movimenti WHERE idconto = ".prepare($conto_terzo['id'])); // Calcolo totale conto da elenco movimenti di questo conto - $query = "SELECT co_movimenti.*, dir FROM (co_movimenti LEFT OUTER JOIN co_documenti ON co_movimenti.iddocumento=co_documenti.id) LEFT OUTER JOIN co_tipidocumento ON co_documenti.idtipodocumento=co_tipidocumento.id WHERE co_movimenti.idconto='".$rs3[$z]['id']."' AND co_movimenti.data >= '".$_SESSION['period_start']."' AND co_movimenti.data <= '".$_SESSION['period_end']."' ORDER BY co_movimenti.data DESC"; - $rs = $dbo->fetchArray($query); + $query = "SELECT co_movimenti.*, dir FROM co_movimenti + LEFT OUTER JOIN co_documenti ON co_movimenti.iddocumento = co_documenti.id + LEFT OUTER JOIN co_tipidocumento ON co_documenti.idtipodocumento = co_tipidocumento.id + WHERE co_movimenti.idconto=".prepare($conto_terzo['id'])." AND co_movimenti.data >= ".prepare($_SESSION['period_start'])." AND co_movimenti.data <= ".prepare($_SESSION['period_end'])." ORDER BY co_movimenti.data DESC"; + $movimenti = $dbo->fetchArray($query); - echo " + \n"; - echo " \n"; - } // Fine livello3 + if ($numero_movimenti <= 0 && !empty($conto_terzo['can_delete'])) { + echo ' + + + '; + } - echo "
\n"; + $totale_conto = sum(array_column($movimenti, 'totale')); + $totale_conto = ($conto_primo['descrizione'] == 'Patrimoniale') ? $totale_conto : -$totale_conto; - $tools = " \n"; - - // Stampa mastrino - if (!empty($rs)) { - $tools .= Prints::getLink('Mastrino', $rs3[$z]['id'], 'btn-info btn-xs', '', null, 'lev=3'); + // Somma dei totali + if ($conto_primo['descrizione'] == 'Patrimoniale') { + if ($totale_conto > 0) { + $totale_attivita[] = abs($totale_conto); + } else { + $totale_passivita[] = abs($totale_conto); + } + } else { + if ($totale_conto > 0) { + $totale_ricavi[] = abs($totale_conto); + } else { + $totale_costi[] = abs($totale_conto); + } } - if ($nr <= 0 && $rs3[$z]['can_delete'] == '1') { - $tools .= ' - - - '; - } + echo ' +
'; - // Possibilità di modificare il nome del conto livello3 - if ($rs3[$z]['can_edit'] == '1') { - $tools .= " \n"; - } - - $tools .= " \n"; - - echo " - "; - - if (!empty($rs)) { + if (!empty($movimenti)) { echo ' '; } - $id_anagrafica = $rs3[$z]['id_cliente'] ?: $rs3[$z]['id_fornitore']; + $id_anagrafica = $conto_terzo['id_cliente'] ?: $conto_terzo['id_fornitore']; echo ' - '.$tools.' '.$rs2[$y]['numero'].'.'.$rs3[$z]['numero'].' '.$rs3[$z]['descrizione'].' '.(isset($id_anagrafica) ? Modules::link('Anagrafiche', $id_anagrafica, 'Anagrafica', null) : '').' - '; + '; - echo '
\n"; - - if (sizeof($rs) > 0) { - $totale_conto_liv3 = []; - - echo " \n"; - echo " \n"; - echo " \n"; - echo " \n"; - echo " \n"; - - // Elenco righe del partitario - for ($i = 0; $i < sizeof($rs); ++$i) { - echo " \n"; - - // Data - echo " \n"; - - // Dare - if ($rs[$i]['totale'] > 0) { - echo " \n"; - echo " \n"; - - if ($rs1[$x]['descrizione'] == 'Patrimoniale') { - $totale_conto_liv3[] = $rs[$i]['totale']; - } else { - $totale_conto_liv3[] = -$rs[$i]['totale']; - } - } - - // Avere - else { - echo " \n"; - - if ($rs1[$x]['descrizione'] == 'Patrimoniale') { - $totale_conto_liv3[] = $rs[$i]['totale']; - } else { - $totale_conto_liv3[] = -$rs[$i]['totale']; - } - } - echo " \n"; - } - - // Somma dei totali - if ($rs1[$x]['descrizione'] == 'Patrimoniale') { - if (sum($totale_conto_liv3) > 0) { - $totale_attivita[] = abs(sum($totale_conto_liv3)); - } else { - $totale_passivita[] = abs(sum($totale_conto_liv3)); - } - } else { - if (sum($totale_conto_liv3) > 0) { - $totale_ricavi[] = abs(sum($totale_conto_liv3)); - } else { - $totale_costi[] = abs(sum($totale_conto_liv3)); - } - } - echo "
CausaleDataDareAvere
\n"; - - if (!empty($rs[$i]['iddocumento'])) { - $module = ($rs[$i]['dir'] == 'entrata') ? Modules::get('Fatture di vendita')['id'] : Modules::get('Fatture di acquisto')['id']; - echo "".$rs[$i]['descrizione']."\n"; - // echo " ".$rs[$i]['descrizione']."\n"; - } else { - echo ' '.$rs[$i]['descrizione']."\n"; - } - - echo " \n"; - echo date('d/m/Y', strtotime($rs[$i]['data'])); - echo "\n"; - echo moneyFormat(abs($rs[$i]['totale']), 2)."\n"; - echo "
\n"; - echo moneyFormat(abs($rs[$i]['totale']), 2)."\n"; - echo "
\n"; + // Stampa mastrino + if (!empty($movimenti)) { + echo ' + '.Prints::getLink('Mastrino', $conto_terzo['id'], 'btn-info btn-xs', '', null, 'lev=3'); } - echo "
\n"; - echo "
\n"; - echo moneyFormat(sum($totale_conto_liv3), 2)."\n"; - echo "
\n"; + // Possibilità di modificare il nome del conto livello3 + if (!empty($conto_terzo['can_edit'])) { + echo ' + '; + } + + echo ' + +  '.$conto_secondo['numero'].'.'.$conto_terzo['numero'].' '.$conto_terzo['descrizione'].' '.(isset($id_anagrafica) ? Modules::link('Anagrafiche', $id_anagrafica, 'Anagrafica', null) : '').' + + + + + + + '.moneyFormat(sum($totale_conto), 2).' + + '; + } + + echo ' + '; // Possibilità di inserire un nuovo conto - echo "

\n"; - echo "
\n"; - } // Fine livello 2 + echo ' + + +

+
'; + } - echo "
\n"; - - if ($rs1[$x]['descrizione'] == 'Patrimoniale') { - // Riepilogo + echo ' + + + ' + ; + // Riepiloghi + if ($conto_primo['descrizione'] == 'Patrimoniale') { $attivita = abs(sum($totale_attivita)); $passivita = abs(sum($totale_passivita)); $utile_perdita = abs(sum($totale_ricavi)) - abs(sum($totale_costi)); @@ -207,66 +153,153 @@ for ($x = 0; $x < $n1; ++$x) { $pareggio2 = abs($passivita) + abs($utile_perdita); } - echo "
\n"; - // Attività - echo "\n"; - - echo "\n"; - echo "\n"; + echo ' + + + + '; // Passività - echo "\n"; - echo "\n"; + echo ' + + + '; // Perdita d'esercizio if ($utile_perdita < 0) { - echo "\n"; - echo "\n"; - echo "\n"; - echo "\n"; + echo ' + + + + + + + '; } else { - echo "\n"; - echo "\n"; + echo ' + + + + + + + '; } // Totale a pareggio - echo "\n"; - echo "\n"; - echo "\n"; - - // Totale a pareggio - echo "\n"; - echo "\n"; - - echo '
\n"; - echo "

Totale attività:

\n"; - echo "
\n"; - echo "

".moneyFormat($attivita, 2)."

\n"; - echo "
+ '.tr('Totale attività').': + + '.moneyFormat($attivita, 2).' + \n"; - echo "

Passività:

\n"; - echo "
\n"; - echo "

".moneyFormat($passivita, 2)."

\n"; - echo "
+ '.tr('Passività').': + + '.moneyFormat($passivita, 2).' +
\n"; - echo "

Perdita d'esercizio:

\n"; - echo "
\n"; - echo "

".moneyFormat(sum($utile_perdita), 2)."

\n"; - echo "
+ '.tr("Perdita d'esercizio").': + + '.moneyFormat(sum($utile_perdita), 2).' +
\n"; - echo "

Utile:

\n"; - echo "
\n"; - echo "

".moneyFormat(sum($utile_perdita), 2)."

\n"; - echo "
+ '.tr('Utile').': + + '.moneyFormat(sum($utile_perdita), 2).' +
\n"; - echo "

Totale a pareggio:

\n"; - echo "
\n"; - echo "

".moneyFormat(sum($pareggio1), 2)."

\n"; - echo "
\n"; - echo "

Totale a pareggio:

\n"; - echo "
\n"; - echo "

".moneyFormat(sum($pareggio2), 2)."

\n"; - echo "
'; + echo ' + + + '.tr('Totale a pareggio').': + + + '.moneyFormat(sum($pareggio1), 2).' + + + + + '.tr('Totale a pareggio').': + + + '.moneyFormat(sum($pareggio2), 2).' + + '; } else { - echo "

RICAVI: ".moneyFormat(sum($totale_ricavi), 2)."

\n"; - echo "

COSTI: ".moneyFormat(abs(sum($totale_costi)), 2)."

\n"; - echo "

UTILE/PERDITA: ".moneyFormat(sum($totale_ricavi) - abs(sum($totale_costi)), 2)."

\n"; + echo ' + + + '.tr('Ricavi').': + + + '.moneyFormat(sum($totale_ricavi), 2).' + + + + + + '.tr('Costi').': + + + '.moneyFormat(sum($totale_costi), 2).' + + + + + + '.tr('Utile/perdita').': + + + '.moneyFormat(sum($totale_ricavi) - abs(sum($totale_costi)), 2).' + + '; } + +echo ' + '; } + +echo ' +';