Aggiornamento widget rate contrattuali

This commit is contained in:
Thomas Zilio 2020-04-20 11:23:01 +02:00
parent fcdc80dd84
commit 2a24b71b23
7 changed files with 123 additions and 155 deletions

View File

@ -1,139 +0,0 @@
<?php
include_once __DIR__.'/../../../core.php';
// TODO: aggiornare con la funzione months()
$mesi = [
tr('Gennaio'),
tr('Febbraio'),
tr('Marzo'),
tr('Aprile'),
tr('Maggio'),
tr('Giugno'),
tr('Luglio'),
tr('Agosto'),
tr('Settembre'),
tr('Ottobre'),
tr('Novembre'),
tr('Dicembre'),
];
// Righe inserite
//idcontratto IN( SELECT id FROM co_contratti WHERE idstato IN(SELECT id FROM co_staticontratti WHERE is_pianificabile = 1) ) AND
$qp = "SELECT *,
(SELECT SUM(subtotale) FROM co_righe_contratti WHERE idcontratto=co_fatturazione_contratti.idcontratto) AS budget_contratto,
DATE_FORMAT(data_scadenza, '%m-%Y') AS mese,
(SELECT idanagrafica FROM co_contratti WHERE id=idcontratto) AS idcliente,
(SELECT nome FROM co_contratti WHERE id=idcontratto) AS nome,
(SELECT ragione_sociale FROM an_anagrafiche WHERE idanagrafica=(SELECT idanagrafica FROM co_contratti WHERE id=idcontratto)) AS ragione_sociale,
(SELECT descrizione FROM an_zone WHERE id=co_fatturazione_contratti.idzona) AS zona
FROM co_fatturazione_contratti WHERE co_fatturazione_contratti.iddocumento=0 ORDER BY data_scadenza ASC, idcliente ASC";
$rsp = $dbo->fetchArray($qp);
if (!empty($rsp)) {
// Lettura numero di rate e totale già fatturato
$rs2 = $dbo->fetchArray('SELECT * FROM co_fatturazione_contratti');
for ($j = 0; $j < sizeof($rs2); ++$j) {
// Leggo quante rate sono pianificate per dividere l'importo delle sedi in modo corretto
++$n_rate[$rs2[$j]['idcontratto']][$rs2[$j]['idzona']];
// Leggo il totale già fatturato per questa zona per toglierlo dalla divisione (totale/n_rate)
$rs3 = $dbo->fetchArray('SELECT SUM(subtotale-sconto) AS totale FROM co_righe_documenti WHERE iddocumento='.prepare($rs2[$j]['iddocumento']));
$gia_fatturato[$rs2[$j]['idcontratto']][$rs2[$j]['idzona']] += $rs3[0]['totale'];
}
// Elenco fatture da emettere
foreach ($rsp as $i => $r) {
++$n_rata[$r['idzona']][$r['idcontratto']];
// Se cambia il mese ricreo l'intestazione della tabella
if (!isset($rsp[$i - 1]) || $r['mese'] != $rsp[$i - 1]['mese']) {
echo "
<div class='title_settings'>
<a class='clickable' onclick=\"$('#f_".$i."').slideToggle();\"></a>
</div>";
if ($i == 0) {
$attr = '';
$class = 'fa-minus-circle';
} else {
$attr = 'style="display:none;"';
$class = 'fa-plus-circle';
}
echo "
<h4>
<a class='clickable' onclick=\"if( $('#f_".$i."').css('display') == 'none' ){ $(this).children('i').removeClass('fa-plus-circle'); $(this).children('i').addClass('fa-minus-circle'); }else{ $(this).children('i').addClass('fa-plus-circle'); $(this).children('i').removeClass('fa-minus-circle'); } $('#f_".$i."').slideToggle();\">
<i class='fa ".$class."'></i> ".$mesi[intval(date('m', strtotime($r['data_scadenza']))) - 1].' '.date('Y', strtotime($r['data_scadenza'])).'
</a>
</h4>';
echo '
<div id="f_'.$i.'" '.$attr.'>
<table class="table table-hover table-striped">
<thead>
<tr>
<th width="25%">'.tr('Entro il').'</th>
<th width="35%">'.tr('Ragione sociale').'</th>
<th width="20%">'.tr('Importo').'</th>
<th width="10%"></th>
</tr>
</thead>
<tbody>';
}
// Lettura numero di sedi in cui si sono pianificati ordini di servizio per la zona corrente
if (!empty($r['idzona'])) {
$n_sedi_pianificate = $dbo->fetchNum('SELECT DISTINCT(idsede) FROM my_impianti WHERE id IN (SELECT idimpianto FROM co_ordiniservizio WHERE idcontratto='.prepare($id_record).') AND idsede IN(SELECT id FROM an_sedi WHERE idzona='.prepare($r['idzona']).')');
// Verifico se ci sono impianti in questa zona legati alla sede legale
$n_sedi_pianificate += $dbo->fetchNum('SELECT DISTINCT(idsede) FROM my_impianti WHERE id IN (SELECT idimpianto FROM co_ordiniservizio WHERE idcontratto='.prepare($id_record).') AND idsede=(SELECT idsede FROM an_anagrafiche WHERE idanagrafica=(SELECT idanagrafica FROM co_contratti WHERE id='.prepare($id_record).') AND idzona='.prepare($r['idzona']).') AND idsede=0');
}
// Fix nel caso non siano previste sedi pianificate (l'eventuale 0 portava a problemi nel calcolo dell'importo)
$n_sedi_pianificate = ($n_sedi_pianificate < 1) ? 1 : $n_sedi_pianificate;
/*
Importo
*/
// $importo = ($r['budget_contratto'] * $n_sedi_pianificate / $n_rate[ $r['idcontratto'] ][ $r['idzona'] ]) - ($gia_fatturato[ $r['idcontratto'] ][ $r['idzona'] ] * $n_sedi_pianificate / sizeof($gia_fatturato[ $r['idcontratto'] ][ $r['idzona'] ]) );
$importo = ($r['budget_contratto'] * $n_sedi_pianificate / $n_rate[$r['idcontratto']][$r['idzona']]);
// Visualizzo solo le rate non pagate
if ($r['iddocumento'] == 0) {
echo "
<tr id='fat_".$r['id']."'>
<td>".Translator::dateToLocale($r['data_scadenza'])."<br><a href='".$rootdir.'/editor.php?id_module='.Modules::get('Contratti')['id'].'&id_record='.$r['idcontratto']."'><small>rif. ".$r['nome']." </small></a></td>
<td>
<a href='".$rootdir.'/editor.php?id_module='.Modules::get('Anagrafiche')['id'].'&id_record='.$r['idcliente']."'>".nl2br($r['ragione_sociale']).'</a>
</td>
<td>
'.moneyFormat($importo).'<br>
<small><small>'.moneyFormat($r['budget_contratto']).' / '.$n_rate[$r['idcontratto']][$r['idzona']].' rate</small></small>
</td>';
// Pulsanti
echo '
<td>';
if (empty($r['idintervento'])) {
echo '<button type="button" class="btn btn-primary btn-sm" onclick="launch_modal( \'Crea fattura\', \''.$rootdir.'/modules/contratti/plugins/addfattura.php?idcontratto='.$r['idcontratto'].'&idpianificazione='.$r['id'].'&importo='.$importo.'&n_rata='.$n_rata[$r['idzona']][$r['idcontratto']].'\');">
<i class="fa fa-euro"></i> Crea fattura
</button>';
}
echo '
</td>
</tr>';
}
if (!isset($rsp[$i + 1]) || $r['mese'] != $rsp[$i + 1]['mese']) {
echo '
</tbody>
</table>
</div>';
}
}
} else {
echo '
<p>'.tr('Non ci sono fatture da emettere').'.</p>';
}

View File

@ -29,17 +29,17 @@ foreach ($raggruppamenti as $mese => $raggruppamento) {
echo "
<h4>
<a class='clickable' onclick=\"if( $('#t1_".$counter."').css('display') == 'none' ){ $(this).children('i').removeClass('fa-plus-circle'); $(this).children('i').addClass('fa-minus-circle'); }else{ $(this).children('i').addClass('fa-plus-circle'); $(this).children('i').removeClass('fa-minus-circle'); } $('#t1_".$counter."').slideToggle();\">
<a class='clickable' onclick=\"if( $('#interventi_pianificare_".$counter."').css('display') == 'none' ){ $(this).children('i').removeClass('fa-plus-circle'); $(this).children('i').addClass('fa-minus-circle'); }else{ $(this).children('i').addClass('fa-plus-circle'); $(this).children('i').removeClass('fa-minus-circle'); } $('#interventi_pianificare_".$counter."').slideToggle();\">
<i class='fa ".$class."'></i> ".$mese.'
</a>
</h4>';
echo '
<div id="t1_'.$counter.'" '.$attr.'>
<div id="interventi_pianificare_'.$counter.'" '.$attr.'>
<table class="table table-hover table-striped">
<thead>
<tr>
<th width="70">'.tr('Codice').'</th>
<th width="70">'.tr('Codice').'</th>
<th width="120">'.tr('Cliente').'</th>
<th width="70"><small>'.tr('Data richiesta').'</small></th>
<th width="70"><small>'.tr('Data scadenza').'</small></th>

View File

@ -70,10 +70,9 @@ switch ($operazione) {
break;
case 'add_fattura':
$contratto = Contratto::find($id_record);
$rata = post('rata');
$pianificazione = $contratto->pianificazioni[$rata];
$id_rata = post('rata');
$pianificazione = Pianificazione::find($id_rata);
$contratto = $pianificazione->contratto;
$data = post('data');
$id_segment = post('id_segment');

View File

@ -1,13 +1,17 @@
<?php
use Modules\Contratti\Contratto;
use Plugins\PianificazioneFatturazione\Pianificazione;
include_once __DIR__.'/../../core.php';
$contratto = Contratto::find($id_record);
$id_rata = get('rata');
$pianificazione = Pianificazione::find($id_rata);
$contratto = $pianificazione->contratto;
$rata = get('rata');
$pianificazione = $contratto->pianificazioni[$rata];
$id_pianificazione = $pianificazione->id;
$numero_rata = $contratto->pianificazioni->search(function ($item) use ($id_pianificazione) {
return $item->id = $id_pianificazione;
}) + 1;
$module_fattura = Modules::get('Fatture di vendita');
@ -15,7 +19,7 @@ echo '
<form action="" method="post">
<input type="hidden" name="op" value="add_fattura">
<input type="hidden" name="backto" value="record-edit">
<input type="hidden" name="rata" value="'.$rata.'">
<input type="hidden" name="rata" value="'.$id_rata.'">
<input type="hidden" name="id_module" value="'.$id_module.'">
<input type="hidden" name="id_plugin" value="'.$id_plugin.'">
<input type="hidden" name="id_record" value="'.$id_record.'">';
@ -42,7 +46,7 @@ echo '
// Descrizione fattura
$descrizione = tr('Rata _N_ del contratto numero _NUM_', [
'_N_' => ($rata + 1),
'_N_' => $numero_rata,
'_NUM_' => $contratto->numero,
]);

View File

@ -41,7 +41,7 @@ if (!$pianificazioni->isEmpty()) {
<tbody>';
$previous = null;
foreach ($pianificazioni as $rata => $pianificazione) {
foreach ($pianificazioni as $pianificazione) {
echo '
<tr>
<td>';
@ -81,7 +81,7 @@ if (!$pianificazioni->isEmpty()) {
// Creazione fattura
echo '
<td class="text-center">
<button type="button" class="btn btn-primary btn-sm '.(!empty($fattura) ? 'disabled' : '').'" '.(!empty($fattura) ? 'disabled' : '').' onclick="crea_fattura('.$rata.')">
<button type="button" class="btn btn-primary btn-sm '.(!empty($fattura) ? 'disabled' : '').'" '.(!empty($fattura) ? 'disabled' : '').' onclick="crea_fattura('.$pianificazione->id.')">
<i class="fa fa-euro"></i> '.tr('Crea fattura').'
</button>
</td>

View File

@ -0,0 +1,100 @@
<?php
use Plugins\PianificazioneFatturazione\Pianificazione;
include_once __DIR__.'/../../../core.php';
$pianificazioni = Pianificazione::doesntHave('fattura')->get();
if ($pianificazioni->isEmpty()) {
echo '
<p>'.tr('Non ci sono fatture da emettere').'.</p>';
return;
}
$raggruppamenti = $pianificazioni->groupBy(function ($item) {
return ucfirst($item->data_scadenza->formatLocalized('%B %Y'));
});
$counter = 0;
foreach ($raggruppamenti as $mese => $raggruppamento) {
++$counter;
// Se cambia il mese ricreo l'intestazione della tabella
if ($counter == 1) {
$attr = '';
$class = 'fa-minus-circle';
} else {
$attr = 'style="display:none;"';
$class = 'fa-plus-circle';
}
echo "
<h4>
<a class='clickable' onclick=\"if( $('#rate_pianificare_".$counter."').css('display') == 'none' ){ $(this).children('i').removeClass('fa-plus-circle'); $(this).children('i').addClass('fa-minus-circle'); }else{ $(this).children('i').addClass('fa-plus-circle'); $(this).children('i').removeClass('fa-minus-circle'); } $('#rate_pianificare_".$counter."').slideToggle();\">
<i class='fa ".$class."'></i> ".$mese.'
</a>
</h4>';
echo '
<div id="rate_pianificare_'.$counter.'" '.$attr.'>
<table class="table table-hover table-striped">
<thead>
<tr>
<th width="25%">'.tr('Entro il').'</th>
<th width="35%">'.tr('Ragione sociale').'</th>
<th width="20%">'.tr('Importo').'</th>
<th width="10%"></th>
</tr>
</thead>
<tbody>';
// Elenco fatture da emettere
foreach ($pianificazioni as $pianificazione) {
$contratto = $pianificazione->contratto;
$anagrafica = $contratto->anagrafica;
echo '
<tr>
<td>
'.dateFormat($pianificazione->data_scadenza).'
<br><small>'.reference($contratto)."</small>
</td>
<td>
<a href='".$rootdir.'/editor.php?id_module='.Modules::get('Anagrafiche')['id'].'&id_record='.$anagrafica->id."'>".nl2br($anagrafica->ragione_sociale).'</a>
</td>
<td>
'.moneyFormat($pianificazione->totale).'<br>
<small>'.tr('_TOT_ / _NUM_ rate', [
'_TOT_' => moneyFormat($contratto->totale),
'_NUM_' => numberFormat($contratto->pianificazioni()->count(), 0),
]).'</small>
</td>';
// Pulsanti
echo '
<td class="text-center">
<button type="button" class="btn btn-primary btn-sm" onclick="crea_fattura('.$contratto->id.', '.$pianificazione->id.')">
<i class="fa fa-euro"></i> '.tr('Crea fattura').'
</button>
</td>
</tr>';
}
echo '
</tbody>
</table>
</div>';
}
$modulo_pianificazione = Modules::get('Contratti');
$plugin_pianificazione = Plugins::get('Pianificazione fatturazione');
echo '
<script>
function crea_fattura(contratto, rata){
openModal("Crea fattura", "'.$plugin_pianificazione->fileurl('crea_fattura.php').'?id_module='.$modulo_pianificazione->id.'&id_plugin='.$plugin_pianificazione->id.'&id_record=" + contratto + "&rata=" + rata);
}
</script>';

View File

@ -533,4 +533,8 @@ INSERT INTO `zz_views` (`id_module`, `name`, `query`, `order`, `search`, `format
-- Aggiunta colonna Rif. fattura per attività
INSERT INTO `zz_views` (`id_module`, `name`, `query`, `order`, `search`, `format`, `default`, `visible`) VALUES
((SELECT `id` FROM `zz_modules` WHERE `name` = 'Interventi'), 'Rif. fattura', 'fattura.info', 17, 1, 0, 0, 1);
((SELECT `id` FROM `zz_modules` WHERE `name` = 'Interventi'), 'Rif. fattura', 'fattura.info', 17, 1, 0, 0, 1);
-- Aggiornamento widget Rate contrattuali
UPDATE `zz_widgets` SET `more_link` = './plugins/pianificazione_fatturazione/widgets/rate_contrattuali.php' WHERE `zz_widgets`.`name` = 'Rate contrattuali';