Merge branch 'master' of https://github.com/devcode-it/openstamanager
This commit is contained in:
commit
322656fce5
|
@ -86,9 +86,10 @@ $disabled = empty($result['idarticolo']);
|
|||
echo '
|
||||
<div class="row '.(!empty($options['nascondi_prezzi']) ? 'hidden' : '').'" id="prezzi_articolo">
|
||||
<div class="col-md-4 text-center">
|
||||
<button type="button" class="btn btn-sm btn-info btn-block '.($disabled ? 'disabled' : '').'" '.($disabled ? 'disabled' : '').' onclick="$(\'#prezziacquisto\').toggleClass(\'hide\'); $(\'#prezziacquisto\').load(\''.base_path()."/ajax_complete.php?module=Articoli&op=getprezziacquisto&idarticolo=' + ( $('#idarticolo option:selected').val() || $('#idarticolo').val()) + '&idanagrafica=".$options['idanagrafica'].'\');">
|
||||
<button type="button" class="btn btn-sm btn-info btn-block '.($disabled ? 'disabled' : '').'" '.($disabled ? 'disabled' : '').' onclick="$(\'#prezziacquisto\').toggleClass(\'hide\'); $(\'#prezziacquisto\').load(\''.base_path()."/ajax_complete.php?module=Articoli&op=getprezziacquisto&idarticolo=' + ( $('#idarticolo option:selected').val() || $('#idarticolo').val()) + '&limit=5".'\');">
|
||||
<i class="fa fa-shopping-cart"></i> '.tr('Ultimi prezzi di acquisto').'
|
||||
</button>
|
||||
<br>
|
||||
<div id="prezziacquisto" class="hide"></div>
|
||||
</div>
|
||||
|
||||
|
@ -100,9 +101,10 @@ echo '
|
|||
</div>
|
||||
|
||||
<div class="col-md-4 text-center">
|
||||
<button type="button" class="btn btn-sm btn-info btn-block '.($disabled ? 'disabled' : '').'" '.($disabled ? 'disabled' : '').' onclick="$(\'#prezzivendita\').toggleClass(\'hide\'); $(\'#prezzivendita\').load(\''.base_path()."/ajax_complete.php?module=Articoli&op=getprezzivendita&idarticolo=' + ( $('#idarticolo option:selected').val() || $('#idarticolo').val()) + '&idanagrafica=".$options['idanagrafica'].'\');">
|
||||
<button type="button" class="btn btn-sm btn-info btn-block '.($disabled ? 'disabled' : '').'" '.($disabled ? 'disabled' : '').' onclick="$(\'#prezzivendita\').toggleClass(\'hide\'); $(\'#prezzivendita\').load(\''.base_path()."/ajax_complete.php?module=Articoli&op=getprezzivendita&idarticolo=' + ( $('#idarticolo option:selected').val() || $('#idarticolo').val()) + '&limit=5".'\');">
|
||||
<i class="fa fa-money"></i> '.tr('Ultimi prezzi di vendita').'
|
||||
</button>
|
||||
<br>
|
||||
<div id="prezzivendita" class="hide"></div>
|
||||
</div>
|
||||
</div>
|
||||
|
|
|
@ -20,6 +20,7 @@
|
|||
include_once __DIR__.'/../../../core.php';
|
||||
|
||||
$idarticolo = get('idarticolo');
|
||||
$limit = get('limit');
|
||||
|
||||
switch ($resource) {
|
||||
// Legge gli ultimi prezzi di vendita di un determinato cliente e un determinato articolo e li visualizza per suggerire il prezzo di vendita
|
||||
|
@ -61,10 +62,10 @@ switch ($resource) {
|
|||
// Ultime 5 vendite totali
|
||||
$documenti = $dbo->fetchArray('SELECT iddocumento AS id, "Fattura" AS tipo, "Fatture di vendita" AS modulo, (subtotale-sconto)/qta AS costo_unitario, (SELECT numero FROM co_documenti WHERE id=iddocumento) AS n_documento, (SELECT numero_esterno FROM co_documenti WHERE id=iddocumento) AS n2_documento, (SELECT data FROM co_documenti WHERE id=iddocumento) AS data_documento FROM co_righe_documenti WHERE idarticolo='.prepare($idarticolo).' AND iddocumento IN(SELECT id FROM co_documenti WHERE idtipodocumento IN(SELECT id FROM co_tipidocumento WHERE dir="entrata"))
|
||||
UNION
|
||||
SELECT idddt AS id, "Ddt" AS tipo, "Ddt di vendita" AS modulo, (subtotale-sconto)/qta AS costo_unitario, (SELECT numero FROM dt_ddt WHERE id=idddt) AS n_documento, (SELECT numero_esterno FROM dt_ddt WHERE id=idddt) AS n2_documento, (SELECT data FROM dt_ddt WHERE id=idddt) AS data_documento FROM dt_righe_ddt WHERE idarticolo='.prepare($idarticolo).' AND idddt IN(SELECT id FROM dt_ddt WHERE idtipoddt IN(SELECT id FROM dt_tipiddt WHERE dir="entrata")) LIMIT 0,5');
|
||||
SELECT idddt AS id, "Ddt" AS tipo, "Ddt di vendita" AS modulo, (subtotale-sconto)/qta AS costo_unitario, (SELECT numero FROM dt_ddt WHERE id=idddt) AS n_documento, (SELECT numero_esterno FROM dt_ddt WHERE id=idddt) AS n2_documento, (SELECT data FROM dt_ddt WHERE id=idddt) AS data_documento FROM dt_righe_ddt WHERE idarticolo='.prepare($idarticolo).' AND idddt IN(SELECT id FROM dt_ddt WHERE idtipoddt IN(SELECT id FROM dt_tipiddt WHERE dir="entrata")) LIMIT 0,'.$limit.'');
|
||||
|
||||
if (sizeof($documenti) > 0) {
|
||||
echo "<br/><table class='table table-striped table-bordered table-extra-condensed' >\n";
|
||||
echo "<table class='table table-striped table-bordered table-extra-condensed' >\n";
|
||||
echo "<tr><th width='180'>Documento</th>\n";
|
||||
echo "<th width='100' class='text-right' >Totale</th></tr>\n";
|
||||
|
||||
|
@ -78,7 +79,7 @@ switch ($resource) {
|
|||
}
|
||||
echo "</table>\n";
|
||||
} else {
|
||||
echo '<br/>'.tr('Nessuna vendita trovata di questo articolo')."...<br/>\n";
|
||||
echo ''.tr('Nessuna vendita trovata di questo articolo')."...<br/>\n";
|
||||
}
|
||||
|
||||
break;
|
||||
|
@ -89,10 +90,10 @@ switch ($resource) {
|
|||
// Ultimi 5 acquisti totali
|
||||
$documenti = $dbo->fetchArray('SELECT iddocumento AS id, "Fattura" AS tipo, "Fatture di acquisto" AS modulo, (subtotale-sconto)/qta AS costo_unitario, (SELECT numero FROM co_documenti WHERE id=iddocumento) AS n_documento, (SELECT numero_esterno FROM co_documenti WHERE id=iddocumento) AS n2_documento, (SELECT data FROM co_documenti WHERE id=iddocumento) AS data_documento FROM co_righe_documenti WHERE idarticolo='.prepare($idarticolo).' AND iddocumento IN(SELECT id FROM co_documenti WHERE idtipodocumento IN(SELECT id FROM co_tipidocumento WHERE dir="uscita"))
|
||||
UNION
|
||||
SELECT idddt AS id, "Ddt" AS tipo, "Ddt di acquisto" AS modulo, (subtotale-sconto)/qta AS costo_unitario, (SELECT numero FROM dt_ddt WHERE id=idddt) AS n_documento, (SELECT numero_esterno FROM dt_ddt WHERE id=idddt) AS n2_documento, (SELECT data FROM dt_ddt WHERE id=idddt) AS data_documento FROM dt_righe_ddt WHERE idarticolo='.prepare($idarticolo).' AND idddt IN(SELECT id FROM dt_ddt WHERE idtipoddt IN(SELECT id FROM dt_tipiddt WHERE dir="uscita")) LIMIT 0,5');
|
||||
SELECT idddt AS id, "Ddt" AS tipo, "Ddt di acquisto" AS modulo, (subtotale-sconto)/qta AS costo_unitario, (SELECT numero FROM dt_ddt WHERE id=idddt) AS n_documento, (SELECT numero_esterno FROM dt_ddt WHERE id=idddt) AS n2_documento, (SELECT data FROM dt_ddt WHERE id=idddt) AS data_documento FROM dt_righe_ddt WHERE idarticolo='.prepare($idarticolo).' AND idddt IN(SELECT id FROM dt_ddt WHERE idtipoddt IN(SELECT id FROM dt_tipiddt WHERE dir="uscita")) LIMIT 0,'.$limit.'');
|
||||
|
||||
if (sizeof($documenti) > 0) {
|
||||
echo "<br/><table class='table table-striped table-bordered table-extra-condensed' >\n";
|
||||
echo "<table class='table table-striped table-bordered table-extra-condensed' >\n";
|
||||
echo "<tr><th width='180'>Documento</th>\n";
|
||||
echo "<th width='100' class='text-right' >Totale</th></tr>\n";
|
||||
|
||||
|
@ -106,7 +107,7 @@ switch ($resource) {
|
|||
}
|
||||
echo "</table>\n";
|
||||
} else {
|
||||
echo '<br/>'.tr('Nessun acquisto trovato di questo articolo')."...<br/>\n";
|
||||
echo ''.tr('Nessun acquisto trovato di questo articolo')."...<br/>\n";
|
||||
}
|
||||
|
||||
break;
|
||||
|
|
|
@ -261,6 +261,44 @@ echo '
|
|||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="row">
|
||||
<div class="col-md-6">
|
||||
<div class="panel panel-primary">
|
||||
<div class="panel-heading">
|
||||
<h3 class="panel-title">
|
||||
<?php echo tr('Ultimi 20 prezzi di acquisto'); ?>
|
||||
</h3>
|
||||
</div>
|
||||
|
||||
<div class="panel-body">
|
||||
<div class="clearfix"></div>
|
||||
|
||||
<div class="row">
|
||||
<div class="col-md-12" id="prezziacquisto"></div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="col-md-6">
|
||||
<div class="panel panel-primary">
|
||||
<div class="panel-heading">
|
||||
<h3 class="panel-title">
|
||||
<?php echo tr('Ultimi 20 prezzi di vendita'); ?>
|
||||
</h3>
|
||||
</div>
|
||||
|
||||
<div class="panel-body">
|
||||
<div class="clearfix"></div>
|
||||
|
||||
<div class="row">
|
||||
<div class="col-md-12" id="prezzivendita"></div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</form>
|
||||
|
@ -379,5 +417,9 @@ $(document).ready(function(){
|
|||
if(input('id_fornitore').get()){
|
||||
input('prezzo_acquisto').disable();
|
||||
}
|
||||
|
||||
$("#prezziacquisto").load("<?php echo base_path(); ?>/ajax_complete.php?module=Articoli&op=getprezziacquisto&idarticolo="+ <?php echo $id_record; ?> + "&limit=20");
|
||||
|
||||
$("#prezzivendita").load("<?php echo base_path(); ?>/ajax_complete.php?module=Articoli&op=getprezzivendita&idarticolo="+ <?php echo $id_record; ?> + "&limit=20");
|
||||
});
|
||||
</script>
|
||||
|
|
|
@ -67,6 +67,16 @@ switch (filter('op')) {
|
|||
|
||||
break;
|
||||
|
||||
case 'remove-variante':
|
||||
$id_articolo = filter('id_articolo');
|
||||
|
||||
$database->delete('mg_articolo_attributo', ['id_articolo' => $id_articolo]);
|
||||
$database->update('mg_articoli', ['id_combinazione' => null], ['id' => $id_articolo]);
|
||||
|
||||
flash()->info(tr('Variante rimossa correttamente!'));
|
||||
|
||||
break;
|
||||
|
||||
case 'genera-varianti':
|
||||
$combinazione->generaTutto();
|
||||
|
||||
|
|
|
@ -67,7 +67,7 @@ echo '
|
|||
<th width="10%">'.tr('Foto').'</th>
|
||||
<th>'.tr('Variante').'</th>
|
||||
<th>'.tr('Articolo').'</th>
|
||||
<th class="text-center">'.tr('#').'</th>
|
||||
<th class="text-center" width="13%"></th>
|
||||
</tr>
|
||||
</thead>
|
||||
|
||||
|
@ -82,7 +82,10 @@ foreach ($articoli as $articolo) {
|
|||
<td>'.Modules::link('Articoli', $articolo->id, $articolo->codice.' - '.$articolo->descrizione).'</td>
|
||||
<td class="text-center">
|
||||
<button type="button" class="btn btn-warning btn-xs" onclick="modificaVariante('.$articolo->id.')">
|
||||
<i class="fa fa-edit"></i>
|
||||
<i class="fa fa-edit"></i> '.tr('Modifica').'
|
||||
</button>
|
||||
<button type="button" class="btn btn-danger btn-xs" onclick="rimuoviVariante('.$articolo->id.')">
|
||||
<i class="fa fa-remove"></i> '.tr('Rimuovi').'
|
||||
</button>
|
||||
</td>
|
||||
</tr>';
|
||||
|
@ -109,6 +112,12 @@ function modificaVariante(id) {
|
|||
openModal("'.tr('Modifica variante').'", "'.$module->fileurl('edit-variante.php').'?id_module=" + globals.id_module + "&id_record=" + globals.id_record + "&id_articolo=" + id);
|
||||
}
|
||||
|
||||
function rimuoviVariante(id) {
|
||||
if( confirm(\'Rimuovere la variante dalla combinazione?\') ){
|
||||
$.post( \''.base_path().'/modules/combinazioni_articoli/actions.php\', { op: \'remove-variante\', id_articolo: + id }, function(data){ location.href=\''.base_path().'/editor.php?id_module='.$id_module.'&id_record='.$id_record.'\'; } );
|
||||
}
|
||||
}
|
||||
|
||||
function generaVarianti(button) {
|
||||
// Redirect
|
||||
redirect(globals.rootdir + "/editor.php", {
|
||||
|
|
|
@ -29,11 +29,10 @@ if (!empty($interventi)) {
|
|||
<table class="table table-bordered table-condensed">
|
||||
<tr>
|
||||
<th>'.tr('Attività').'</th>
|
||||
<th width="100">'.tr('Ore').'</th>
|
||||
<th width="100">'.tr('Km').'</th>
|
||||
<th width="120">'.tr('Costo').'</th>
|
||||
<th width="120">'.tr('Addebito').'</th>
|
||||
<th width="120">'.tr('Tot. scontato').'</th>
|
||||
<th width="125">'.tr('Ore').'</th>
|
||||
<th width="125">'.tr('Km').'</th>
|
||||
<th width="145">'.tr('Costo').'</th>
|
||||
<th width="145">'.tr('Tot. scontato').'</th>
|
||||
</tr>';
|
||||
|
||||
// Tabella con i dati
|
||||
|
@ -63,10 +62,6 @@ if (!empty($interventi)) {
|
|||
'.moneyFormat($intervento->spesa).'
|
||||
</td>
|
||||
|
||||
<td class="text-right">
|
||||
'.moneyFormat($intervento->imponibile).'
|
||||
</td>
|
||||
|
||||
<td class="text-right">
|
||||
'.moneyFormat($intervento->totale_imponibile).'
|
||||
</td>
|
||||
|
@ -75,7 +70,7 @@ if (!empty($interventi)) {
|
|||
// Riga con dettagli
|
||||
echo '
|
||||
<tr class="hide" id="dettagli_'.$intervento->id.'">
|
||||
<td colspan="6">';
|
||||
<td colspan="5">';
|
||||
|
||||
// Lettura sessioni di lavoro
|
||||
$sessioni = $intervento->sessioni;
|
||||
|
@ -84,15 +79,15 @@ if (!empty($interventi)) {
|
|||
<table class="table table-striped table-condensed table-bordered">
|
||||
<tr>
|
||||
<th>'.tr('Tecnico').'</th>
|
||||
<th width="230">'.tr('Tipo attività').'</th>
|
||||
<th width="120">'.tr('Ore').'</th>
|
||||
<th width="120">'.tr('Km').'</th>
|
||||
<th width="120">'.tr('Costo ore').'</th>
|
||||
<th width="120">'.tr('Costo km').'</th>
|
||||
<th width="120">'.tr('Diritto ch.').'</th>
|
||||
<th width="120">'.tr('Prezzo ore').'</th>
|
||||
<th width="120">'.tr('Prezzo km').'</th>
|
||||
<th width="120">'.tr('Diritto ch.').'</th>
|
||||
<th width="210">'.tr('Tipo attività').'</th>
|
||||
<th width="110">'.tr('Ore').'</th>
|
||||
<th width="110">'.tr('Km').'</th>
|
||||
<th width="110">'.tr('Costo ore').'</th>
|
||||
<th width="110">'.tr('Costo km').'</th>
|
||||
<th width="110">'.tr('Diritto ch.').'</th>
|
||||
<th width="110">'.tr('Prezzo ore').'</th>
|
||||
<th width="110">'.tr('Prezzo km').'</th>
|
||||
<th width="110">'.tr('Diritto ch.').'</th>
|
||||
</tr>';
|
||||
|
||||
foreach ($sessioni as $sessione) {
|
||||
|
@ -113,6 +108,23 @@ if (!empty($interventi)) {
|
|||
<td class="text-right success">'.moneyFormat($sessione->prezzo_viaggio).$sconto_km.'</td>
|
||||
<td class="text-right success">'.moneyFormat($sessione->prezzo_diritto_chiamata).'</td>
|
||||
</tr>';
|
||||
|
||||
// Raggruppamento per tipologia descrizione
|
||||
$tipologie[$sessione->tipo->descrizione]['ore'] += $sessione->ore;
|
||||
$tipologie[$sessione->tipo->descrizione]['costo'] += $sessione->costo_manodopera + $sessione->costo_viaggio + $sessione->costo_diritto_chiamata;
|
||||
$tipologie[$sessione->tipo->descrizione]['ricavo'] += $sessione->prezzo_manodopera - $sessione->sconto_totale_manodopera + $sessione->prezzo_viaggio - $sessione->sconto_totale_viaggio + $sessione->prezzo_diritto_chiamata - $sessione->sconto_totale_viaggio;
|
||||
|
||||
// Raggruppamento per tecnico
|
||||
$tecnici[$sessione->anagrafica->ragione_sociale]['ore'] += $sessione->ore;
|
||||
$tecnici[$sessione->anagrafica->ragione_sociale]['km'] += $sessione->km;
|
||||
$tecnici[$sessione->anagrafica->ragione_sociale]['costo'] += $sessione->costo_manodopera + $sessione->costo_viaggio + $sessione->costo_diritto_chiamata;
|
||||
$tecnici[$sessione->anagrafica->ragione_sociale]['ricavo'] += $sessione->prezzo_manodopera - $sessione->sconto_totale_manodopera + $sessione->prezzo_viaggio - $sessione->sconto_totale_viaggio + $sessione->prezzo_diritto_chiamata - $sessione->sconto_totale_viaggio;
|
||||
|
||||
// Raggruppamento per stato intervento
|
||||
$stati_intervento[$intervento->stato->descrizione]['colore'] = $intervento->stato->colore;
|
||||
$stati_intervento[$intervento->stato->descrizione]['ore'] += $sessione->ore;
|
||||
$stati_intervento[$intervento->stato->descrizione]['costo'] += $sessione->costo_manodopera + $sessione->costo_viaggio + $sessione->costo_diritto_chiamata;
|
||||
$stati_intervento[$intervento->stato->descrizione]['ricavo'] += $sessione->prezzo_manodopera - $sessione->sconto_totale_manodopera + $sessione->prezzo_viaggio - $sessione->sconto_totale_viaggio + $sessione->prezzo_diritto_chiamata - $sessione->sconto_totale_viaggio;
|
||||
}
|
||||
|
||||
echo '
|
||||
|
@ -143,6 +155,10 @@ if (!empty($interventi)) {
|
|||
<td class="text-right danger">'.moneyFormat($articolo->spesa).'</td>
|
||||
<td class="text-right success">'.moneyFormat($articolo->imponibile).$sconto.'</td>
|
||||
</tr>';
|
||||
|
||||
// Raggruppamento per categoria articolo
|
||||
$materiali[$articolo->articolo->categoria->nome]['costo'] += $articolo->spesa;
|
||||
$materiali[$articolo->articolo->categoria->nome]['ricavo'] += $articolo->imponibile - $articolo->sconto;
|
||||
}
|
||||
|
||||
echo '
|
||||
|
@ -213,47 +229,11 @@ if (!empty($interventi)) {
|
|||
<big><b>'.moneyFormat($totale_costo).'</b></big>
|
||||
</td>';
|
||||
|
||||
echo '
|
||||
<td class="text-right">
|
||||
<big><b>'.moneyFormat($totale_addebito).'</b></big>
|
||||
</td>';
|
||||
|
||||
echo '
|
||||
<td class="text-right">
|
||||
<big><b>'.moneyFormat($totale).'</b></big>
|
||||
</td>
|
||||
</tr>';
|
||||
|
||||
$stati = $interventi->groupBy('idstatointervento');
|
||||
if (count($stati) > 0) {
|
||||
// Totali per stato
|
||||
echo '
|
||||
<tr>
|
||||
<td colspan="6">
|
||||
<br><b>'.tr('Totale interventi per stato', [], ['upper' => true]).'</b>
|
||||
</td>
|
||||
</tr>';
|
||||
|
||||
foreach ($stati as $interventi_collegati) {
|
||||
$stato = $interventi_collegati->first()->stato;
|
||||
$totale_stato = sum(array_column($interventi_collegati->toArray(), 'totale_imponibile'));
|
||||
|
||||
echo '
|
||||
<tr>
|
||||
<td colspan="3"></td>
|
||||
|
||||
<td class="text-right" colspan="2" style="background:'.$stato->colore.';">
|
||||
<big><b>'.$stato->descrizione.':</b></big>
|
||||
</td>
|
||||
|
||||
<td class="text-right">
|
||||
<big><b>'.moneyFormat($totale_stato).'</b></big>
|
||||
</td>
|
||||
</tr>';
|
||||
}
|
||||
}
|
||||
|
||||
echo '
|
||||
</tr>
|
||||
</table>';
|
||||
}
|
||||
|
||||
|
@ -330,8 +310,114 @@ if (empty($totale_ore_contratto)) {
|
|||
<p>'.tr('Per monitorare il consumo ore, inserisci almeno una riga con unità di misura "ore"').'.</p>
|
||||
</div>';
|
||||
}
|
||||
echo '
|
||||
<div class="row">
|
||||
<div class="col-md-6">
|
||||
<table class="table text-left table-striped table-bordered">
|
||||
<tr>
|
||||
<th>'.tr('Tipologia').'</th>
|
||||
<th width="10%">'.tr('Ore').'</th>
|
||||
<th width="16%">'.tr('Costo').'</th>
|
||||
<th width="16%">'.tr('Ricavo').'</th>
|
||||
<th width="23%">'.tr('Margine').'</th>
|
||||
</tr>';
|
||||
ksort($tipologie);
|
||||
foreach ($tipologie as $key => $tipologia){
|
||||
$margine = $tipologia['ricavo'] - $tipologia['costo'];
|
||||
$margine_prc = ($tipologia['ricavo'] && $tipologia['costo']) ? (int)((($tipologia['ricavo'] / $tipologia['costo']) - 1) * 100) : 100;
|
||||
echo '
|
||||
<tr>
|
||||
<td>'.$key.'</td>
|
||||
<td class="text-right">'.Translator::numberToLocale($tipologia['ore']).'</td>
|
||||
<td class="text-right">'.Translator::numberToLocale($tipologia['costo']).' €</td>
|
||||
<td class="text-right">'.Translator::numberToLocale($tipologia['ricavo']).' €</td>
|
||||
<td class="text-right '.($margine>0 ? 'bg-success' : 'bg-danger').'">'.Translator::numberToLocale($margine).' € ('.$margine_prc.'%)</td>
|
||||
</tr>';
|
||||
}
|
||||
echo '
|
||||
</table>
|
||||
</div>
|
||||
|
||||
echo '
|
||||
<div class="col-md-6">
|
||||
<table class="table text-left table-striped table-bordered">
|
||||
<tr>
|
||||
<th>'.tr('Tecnici').'</th>
|
||||
<th width="10%">'.tr('Ore').'</th>
|
||||
<th width="7%">'.tr('km').'</th>
|
||||
<th width="16%">'.tr('Costo').'</th>
|
||||
<th width="16%">'.tr('Ricavo').'</th>
|
||||
<th width="23%">'.tr('Margine').'</th>
|
||||
</tr>';
|
||||
ksort($tecnici);
|
||||
foreach ($tecnici as $key => $tecnico){
|
||||
$margine = $tecnico['ricavo'] - $tecnico['costo'];
|
||||
$margine_prc = ($tecnico['ricavo'] && $tecnico['costo']) ? (int)((($tecnico['ricavo'] / $tecnico['costo']) - 1) * 100) : 100;
|
||||
echo '
|
||||
<tr>
|
||||
<td>'.$key.'</td>
|
||||
<td class="text-right">'.Translator::numberToLocale($tecnico['ore']).'</td>
|
||||
<td class="text-right">'.(int)$tecnico['km'].'</td>
|
||||
<td class="text-right">'.Translator::numberToLocale($tecnico['costo']).' €</td>
|
||||
<td class="text-right">'.Translator::numberToLocale($tecnico['ricavo']).' €</td>
|
||||
<td class="text-right '.($margine>0 ? 'bg-success' : 'bg-danger').'">'.Translator::numberToLocale($margine).' € ('.$margine_prc.'%)</td>
|
||||
</tr>';
|
||||
}
|
||||
echo '
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="row">
|
||||
<div class="col-md-6">
|
||||
<table class="table text-left table-striped table-bordered">
|
||||
<tr>
|
||||
<th>'.tr('Stato').'</th>
|
||||
<th width="10%">'.tr('Ore').'</th>
|
||||
<th width="16%">'.tr('Costo').'</th>
|
||||
<th width="16%">'.tr('Ricavo').'</th>
|
||||
<th width="23%">'.tr('Margine').'</th>
|
||||
</tr>';
|
||||
ksort($stati_intervento);
|
||||
foreach ($stati_intervento as $key => $stato){
|
||||
$margine = $stato['ricavo'] - $stato['costo'];
|
||||
$margine_prc = ($stato['ricavo'] && $stato['costo']) ? (int)((($stato['ricavo'] / $stato['costo']) - 1) * 100) : 100;
|
||||
echo '
|
||||
<tr>
|
||||
<td><div class="img-circle" style="width:18px; height:18px; position:relative; bottom:-2px; background:'.$stato['colore'].'; float:left;"></div> '.$key.'</td>
|
||||
<td class="text-right">'.Translator::numberToLocale($stato['ore']).'</td>
|
||||
<td class="text-right">'.Translator::numberToLocale($stato['costo']).' €</td>
|
||||
<td class="text-right">'.Translator::numberToLocale($stato['ricavo']).' €</td>
|
||||
<td class="text-right '.($margine>0 ? 'bg-success' : 'bg-danger').'">'.Translator::numberToLocale($margine).' € ('.$margine_prc.'%)</td>
|
||||
</tr>';
|
||||
}
|
||||
echo '
|
||||
</table>
|
||||
</div>
|
||||
|
||||
<div class="col-md-6">
|
||||
<table class="table text-left table-striped table-bordered">
|
||||
<tr>
|
||||
<th>'.tr('Materiale').'</th>
|
||||
<th width="16%">'.tr('Costo').'</th>
|
||||
<th width="16%">'.tr('Ricavo').'</th>
|
||||
<th width="23%">'.tr('Margine').'</th>
|
||||
</tr>';
|
||||
ksort($materiali);
|
||||
foreach ($materiali as $key => $materiale){
|
||||
$margine = $materiale['ricavo'] - $materiale['costo'];
|
||||
$margine_prc = ($materiale['ricavo'] && $materiale['costo']) ? (int)((($materiale['ricavo'] / $materiale['costo']) - 1) * 100) : 100;
|
||||
echo '
|
||||
<tr>
|
||||
<td>'.$key.'</td>
|
||||
<td class="text-right">'.Translator::numberToLocale($materiale['costo']).' €</td>
|
||||
<td class="text-right">'.Translator::numberToLocale($materiale['ricavo']).' €</td>
|
||||
<td class="text-right '.($margine>0 ? 'bg-success' : 'bg-danger').'">'.Translator::numberToLocale($margine).' € ('.$margine_prc.'%)</td>
|
||||
</tr>';
|
||||
}
|
||||
echo '
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
</div>';
|
||||
|
||||
/*
|
||||
|
|
|
@ -31,7 +31,7 @@ $numero_previsto = verifica_numero_intervento($intervento);
|
|||
if (!empty($numero_previsto) && intval((setting('Verifica numero intervento')))) {
|
||||
echo '
|
||||
<div class="alert alert-warning">
|
||||
<i class="fa fa-warning"></i> '.tr("E' assente una attività di numero _NUM_ in data precedente o corrispondente a _DATE_: potrebbero esserci un errore di continuità con la numerazione corrente delle attività", [
|
||||
<i class="fa fa-warning"></i> '.tr("E' assente una attività di numero _NUM_ in data precedente o corrispondente a _DATE_: potrebbero esserci alcuni errori di continuità con la numerazione delle attività", [
|
||||
'_DATE_' => dateFormat($intervento->data_richiesta),
|
||||
'_NUM_' => '"'.$numero_previsto.'"',
|
||||
]).'.</b>
|
||||
|
|
|
@ -21,8 +21,6 @@ include_once __DIR__.'/../../../core.php';
|
|||
|
||||
use Modules\Interventi\Intervento;
|
||||
|
||||
// CONSUNTIVO
|
||||
|
||||
// Tabella con riepilogo interventi
|
||||
$interventi = Intervento::where('id_ordine', $id_record)->get();
|
||||
if (!empty($interventi)) {
|
||||
|
@ -30,11 +28,10 @@ if (!empty($interventi)) {
|
|||
<table class="table table-bordered table-condensed">
|
||||
<tr>
|
||||
<th>'.tr('Attività').'</th>
|
||||
<th width="100">'.tr('Ore').'</th>
|
||||
<th width="100">'.tr('Km').'</th>
|
||||
<th width="120">'.tr('Costo').'</th>
|
||||
<th width="120">'.tr('Addebito').'</th>
|
||||
<th width="120">'.tr('Tot. scontato').'</th>
|
||||
<th width="125">'.tr('Ore').'</th>
|
||||
<th width="125">'.tr('Km').'</th>
|
||||
<th width="145">'.tr('Costo').'</th>
|
||||
<th width="145">'.tr('Tot. scontato').'</th>
|
||||
</tr>';
|
||||
|
||||
// Tabella con i dati
|
||||
|
@ -62,10 +59,6 @@ if (!empty($interventi)) {
|
|||
'.moneyFormat($intervento->spesa).'
|
||||
</td>
|
||||
|
||||
<td class="text-right">
|
||||
'.moneyFormat($intervento->imponibile).'
|
||||
</td>
|
||||
|
||||
<td class="text-right">
|
||||
'.moneyFormat($intervento->totale_imponibile).'
|
||||
</td>
|
||||
|
@ -74,7 +67,7 @@ if (!empty($interventi)) {
|
|||
// Riga con dettagli
|
||||
echo '
|
||||
<tr class="hide" id="dettagli_'.$intervento->id.'">
|
||||
<td colspan="6">';
|
||||
<td colspan="5">';
|
||||
|
||||
// Lettura sessioni di lavoro
|
||||
$sessioni = $intervento->sessioni;
|
||||
|
@ -83,15 +76,15 @@ if (!empty($interventi)) {
|
|||
<table class="table table-striped table-condensed table-bordered">
|
||||
<tr>
|
||||
<th>'.tr('Tecnico').'</th>
|
||||
<th width="230">'.tr('Tipo attività').'</th>
|
||||
<th width="120">'.tr('Ore').'</th>
|
||||
<th width="120">'.tr('Km').'</th>
|
||||
<th width="120">'.tr('Costo ore').'</th>
|
||||
<th width="120">'.tr('Costo km').'</th>
|
||||
<th width="120">'.tr('Diritto ch.').'</th>
|
||||
<th width="120">'.tr('Prezzo ore').'</th>
|
||||
<th width="120">'.tr('Prezzo km').'</th>
|
||||
<th width="120">'.tr('Diritto ch.').'</th>
|
||||
<th width="210">'.tr('Tipo attività').'</th>
|
||||
<th width="110">'.tr('Ore').'</th>
|
||||
<th width="110">'.tr('Km').'</th>
|
||||
<th width="110">'.tr('Costo ore').'</th>
|
||||
<th width="110">'.tr('Costo km').'</th>
|
||||
<th width="110">'.tr('Diritto ch.').'</th>
|
||||
<th width="110">'.tr('Prezzo ore').'</th>
|
||||
<th width="110">'.tr('Prezzo km').'</th>
|
||||
<th width="110">'.tr('Diritto ch.').'</th>
|
||||
</tr>';
|
||||
|
||||
foreach ($sessioni as $sessione) {
|
||||
|
@ -112,6 +105,23 @@ if (!empty($interventi)) {
|
|||
<td class="text-right success">'.moneyFormat($sessione->prezzo_viaggio).$sconto_km.'</td>
|
||||
<td class="text-right success">'.moneyFormat($sessione->prezzo_diritto_chiamata).'</td>
|
||||
</tr>';
|
||||
|
||||
// Raggruppamento per tipologia descrizione
|
||||
$tipologie[$sessione->tipo->descrizione]['ore'] += $sessione->ore;
|
||||
$tipologie[$sessione->tipo->descrizione]['costo'] += $sessione->costo_manodopera + $sessione->costo_viaggio + $sessione->costo_diritto_chiamata;
|
||||
$tipologie[$sessione->tipo->descrizione]['ricavo'] += $sessione->prezzo_manodopera - $sessione->sconto_totale_manodopera + $sessione->prezzo_viaggio - $sessione->sconto_totale_viaggio + $sessione->prezzo_diritto_chiamata - $sessione->sconto_totale_viaggio;
|
||||
|
||||
// Raggruppamento per tecnico
|
||||
$tecnici[$sessione->anagrafica->ragione_sociale]['ore'] += $sessione->ore;
|
||||
$tecnici[$sessione->anagrafica->ragione_sociale]['km'] += $sessione->km;
|
||||
$tecnici[$sessione->anagrafica->ragione_sociale]['costo'] += $sessione->costo_manodopera + $sessione->costo_viaggio + $sessione->costo_diritto_chiamata;
|
||||
$tecnici[$sessione->anagrafica->ragione_sociale]['ricavo'] += $sessione->prezzo_manodopera - $sessione->sconto_totale_manodopera + $sessione->prezzo_viaggio - $sessione->sconto_totale_viaggio + $sessione->prezzo_diritto_chiamata - $sessione->sconto_totale_viaggio;
|
||||
|
||||
// Raggruppamento per stato intervento
|
||||
$stati_intervento[$intervento->stato->descrizione]['colore'] = $intervento->stato->colore;
|
||||
$stati_intervento[$intervento->stato->descrizione]['ore'] += $sessione->ore;
|
||||
$stati_intervento[$intervento->stato->descrizione]['costo'] += $sessione->costo_manodopera + $sessione->costo_viaggio + $sessione->costo_diritto_chiamata;
|
||||
$stati_intervento[$intervento->stato->descrizione]['ricavo'] += $sessione->prezzo_manodopera - $sessione->sconto_totale_manodopera + $sessione->prezzo_viaggio - $sessione->sconto_totale_viaggio + $sessione->prezzo_diritto_chiamata - $sessione->sconto_totale_viaggio;
|
||||
}
|
||||
|
||||
echo '
|
||||
|
@ -142,6 +152,10 @@ if (!empty($interventi)) {
|
|||
<td class="text-right danger">'.moneyFormat($articolo->spesa).'</td>
|
||||
<td class="text-right success">'.moneyFormat($articolo->imponibile).$sconto.'</td>
|
||||
</tr>';
|
||||
|
||||
// Raggruppamento per categoria articolo
|
||||
$materiali[$articolo->articolo->categoria->nome]['costo'] += $articolo->spesa;
|
||||
$materiali[$articolo->articolo->categoria->nome]['ricavo'] += $articolo->imponibile - $articolo->sconto;
|
||||
}
|
||||
|
||||
echo '
|
||||
|
@ -184,11 +198,11 @@ if (!empty($interventi)) {
|
|||
}
|
||||
|
||||
$array_interventi = $interventi->toArray();
|
||||
$totale_ore = sum(array_column($array_interventi, 'ore_totali'));
|
||||
$totale_km = sum(array_column($array_interventi, 'km_totali'));
|
||||
$totale_costo = sum(array_column($array_interventi, 'spesa'));
|
||||
$totale_addebito = sum(array_column($array_interventi, 'imponibile'));
|
||||
$totale = sum(array_column($array_interventi, 'totale_imponibile'));
|
||||
$totale_ore = sum(array_column($array_interventi, 'ore_totali'));
|
||||
|
||||
// Totali
|
||||
echo '
|
||||
|
@ -212,47 +226,11 @@ if (!empty($interventi)) {
|
|||
<big><b>'.moneyFormat($totale_costo).'</b></big>
|
||||
</td>';
|
||||
|
||||
echo '
|
||||
<td class="text-right">
|
||||
<big><b>'.moneyFormat($totale_addebito).'</b></big>
|
||||
</td>';
|
||||
|
||||
echo '
|
||||
<td class="text-right">
|
||||
<big><b>'.moneyFormat($totale).'</b></big>
|
||||
</td>
|
||||
</tr>';
|
||||
|
||||
$stati = $interventi->groupBy('idstatointervento');
|
||||
if (count($stati) > 0) {
|
||||
// Totali per stato
|
||||
echo '
|
||||
<tr>
|
||||
<td colspan="6">
|
||||
<br><b>'.tr('Totale interventi per stato', [], ['upper' => true]).'</b>
|
||||
</td>
|
||||
</tr>';
|
||||
|
||||
foreach ($stati as $interventi_collegati) {
|
||||
$stato = $interventi_collegati->first()->stato;
|
||||
$totale_stato = sum(array_column($interventi_collegati->toArray(), 'totale_imponibile'));
|
||||
|
||||
echo '
|
||||
<tr>
|
||||
<td colspan="3"></td>
|
||||
|
||||
<td class="text-right" colspan="2" style="background:'.$stato->colore.';">
|
||||
<big><b>'.$stato->descrizione.':</b></big>
|
||||
</td>
|
||||
|
||||
<td class="text-right">
|
||||
<big><b>'.moneyFormat($totale_stato).'</b></big>
|
||||
</td>
|
||||
</tr>';
|
||||
}
|
||||
}
|
||||
|
||||
echo '
|
||||
</tr>
|
||||
</table>';
|
||||
}
|
||||
|
||||
|
@ -277,6 +255,114 @@ if ($diff > 0) {
|
|||
echo '
|
||||
</b></big></span>
|
||||
<br><br>
|
||||
|
||||
<div class="row">
|
||||
<div class="col-md-6">
|
||||
<table class="table text-left table-striped table-bordered">
|
||||
<tr>
|
||||
<th>'.tr('Tipologia').'</th>
|
||||
<th width="10%">'.tr('Ore').'</th>
|
||||
<th width="16%">'.tr('Costo').'</th>
|
||||
<th width="16%">'.tr('Ricavo').'</th>
|
||||
<th width="23%">'.tr('Margine').'</th>
|
||||
</tr>';
|
||||
ksort($tipologie);
|
||||
foreach ($tipologie as $key => $tipologia){
|
||||
$margine = $tipologia['ricavo'] - $tipologia['costo'];
|
||||
$margine_prc = ($tipologia['ricavo'] && $tipologia['costo']) ? (int)((($tipologia['ricavo'] / $tipologia['costo']) - 1) * 100) : 100;
|
||||
echo '
|
||||
<tr>
|
||||
<td>'.$key.'</td>
|
||||
<td class="text-right">'.Translator::numberToLocale($tipologia['ore']).'</td>
|
||||
<td class="text-right">'.Translator::numberToLocale($tipologia['costo']).' €</td>
|
||||
<td class="text-right">'.Translator::numberToLocale($tipologia['ricavo']).' €</td>
|
||||
<td class="text-right '.($margine>0 ? 'bg-success' : 'bg-danger').'">'.Translator::numberToLocale($margine).' € ('.$margine_prc.'%)</td>
|
||||
</tr>';
|
||||
}
|
||||
echo '
|
||||
</table>
|
||||
</div>
|
||||
|
||||
<div class="col-md-6">
|
||||
<table class="table text-left table-striped table-bordered">
|
||||
<tr>
|
||||
<th>'.tr('Tecnici').'</th>
|
||||
<th width="10%">'.tr('Ore').'</th>
|
||||
<th width="7%">'.tr('km').'</th>
|
||||
<th width="16%">'.tr('Costo').'</th>
|
||||
<th width="16%">'.tr('Ricavo').'</th>
|
||||
<th width="23%">'.tr('Margine').'</th>
|
||||
</tr>';
|
||||
ksort($tecnici);
|
||||
foreach ($tecnici as $key => $tecnico){
|
||||
$margine = $tecnico['ricavo'] - $tecnico['costo'];
|
||||
$margine_prc = ($tecnico['ricavo'] && $tecnico['costo']) ? (int)((($tecnico['ricavo'] / $tecnico['costo']) - 1) * 100) : 100;
|
||||
echo '
|
||||
<tr>
|
||||
<td>'.$key.'</td>
|
||||
<td class="text-right">'.Translator::numberToLocale($tecnico['ore']).'</td>
|
||||
<td class="text-right">'.(int)$tecnico['km'].'</td>
|
||||
<td class="text-right">'.Translator::numberToLocale($tecnico['costo']).' €</td>
|
||||
<td class="text-right">'.Translator::numberToLocale($tecnico['ricavo']).' €</td>
|
||||
<td class="text-right '.($margine>0 ? 'bg-success' : 'bg-danger').'">'.Translator::numberToLocale($margine).' € ('.$margine_prc.'%)</td>
|
||||
</tr>';
|
||||
}
|
||||
echo '
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="row">
|
||||
<div class="col-md-6">
|
||||
<table class="table text-left table-striped table-bordered">
|
||||
<tr>
|
||||
<th>'.tr('Stato').'</th>
|
||||
<th width="10%">'.tr('Ore').'</th>
|
||||
<th width="16%">'.tr('Costo').'</th>
|
||||
<th width="16%">'.tr('Ricavo').'</th>
|
||||
<th width="23%">'.tr('Margine').'</th>
|
||||
</tr>';
|
||||
ksort($stati_intervento);
|
||||
foreach ($stati_intervento as $key => $stato){
|
||||
$margine = $stato['ricavo'] - $stato['costo'];
|
||||
$margine_prc = ($stato['ricavo'] && $stato['costo']) ? (int)((($stato['ricavo'] / $stato['costo']) - 1) * 100) : 100;
|
||||
echo '
|
||||
<tr>
|
||||
<td><div class="img-circle" style="width:18px; height:18px; position:relative; bottom:-2px; background:'.$stato['colore'].'; float:left;"></div> '.$key.'</td>
|
||||
<td class="text-right">'.Translator::numberToLocale($stato['ore']).'</td>
|
||||
<td class="text-right">'.Translator::numberToLocale($stato['costo']).' €</td>
|
||||
<td class="text-right">'.Translator::numberToLocale($stato['ricavo']).' €</td>
|
||||
<td class="text-right '.($margine>0 ? 'bg-success' : 'bg-danger').'">'.Translator::numberToLocale($margine).' € ('.$margine_prc.'%)</td>
|
||||
</tr>';
|
||||
}
|
||||
echo '
|
||||
</table>
|
||||
</div>
|
||||
|
||||
<div class="col-md-6">
|
||||
<table class="table text-left table-striped table-bordered">
|
||||
<tr>
|
||||
<th>'.tr('Materiale').'</th>
|
||||
<th width="16%">'.tr('Costo').'</th>
|
||||
<th width="16%">'.tr('Ricavo').'</th>
|
||||
<th width="23%">'.tr('Margine').'</th>
|
||||
</tr>';
|
||||
ksort($materiali);
|
||||
foreach ($materiali as $key => $materiale){
|
||||
$margine = $materiale['ricavo'] - $materiale['costo'];
|
||||
$margine_prc = ($materiale['ricavo'] && $materiale['costo']) ? (int)((($materiale['ricavo'] / $materiale['costo']) - 1) * 100) : 100;
|
||||
echo '
|
||||
<tr>
|
||||
<td>'.$key.'</td>
|
||||
<td class="text-right">'.Translator::numberToLocale($materiale['costo']).' €</td>
|
||||
<td class="text-right">'.Translator::numberToLocale($materiale['ricavo']).' €</td>
|
||||
<td class="text-right '.($margine>0 ? 'bg-success' : 'bg-danger').'">'.Translator::numberToLocale($margine).' € ('.$margine_prc.'%)</td>
|
||||
</tr>';
|
||||
}
|
||||
echo '
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
</div>';
|
||||
|
||||
/*
|
||||
|
|
|
@ -21,8 +21,6 @@ include_once __DIR__.'/../../../core.php';
|
|||
|
||||
use Modules\Interventi\Intervento;
|
||||
|
||||
// CONSUNTIVO
|
||||
|
||||
// Tabella con riepilogo interventi
|
||||
$interventi = Intervento::where('id_preventivo', $id_record)->get();
|
||||
if (!empty($interventi)) {
|
||||
|
@ -30,11 +28,10 @@ if (!empty($interventi)) {
|
|||
<table class="table table-bordered table-condensed">
|
||||
<tr>
|
||||
<th>'.tr('Attività').'</th>
|
||||
<th width="100">'.tr('Ore').'</th>
|
||||
<th width="100">'.tr('Km').'</th>
|
||||
<th width="120">'.tr('Costo').'</th>
|
||||
<th width="120">'.tr('Addebito').'</th>
|
||||
<th width="120">'.tr('Tot. scontato').'</th>
|
||||
<th width="125">'.tr('Ore').'</th>
|
||||
<th width="125">'.tr('Km').'</th>
|
||||
<th width="145">'.tr('Costo').'</th>
|
||||
<th width="145">'.tr('Tot. scontato').'</th>
|
||||
</tr>';
|
||||
|
||||
// Tabella con i dati
|
||||
|
@ -62,10 +59,6 @@ if (!empty($interventi)) {
|
|||
'.moneyFormat($intervento->spesa).'
|
||||
</td>
|
||||
|
||||
<td class="text-right">
|
||||
'.moneyFormat($intervento->imponibile).'
|
||||
</td>
|
||||
|
||||
<td class="text-right">
|
||||
'.moneyFormat($intervento->totale_imponibile).'
|
||||
</td>
|
||||
|
@ -74,7 +67,7 @@ if (!empty($interventi)) {
|
|||
// Riga con dettagli
|
||||
echo '
|
||||
<tr class="hide" id="dettagli_'.$intervento->id.'">
|
||||
<td colspan="6">';
|
||||
<td colspan="5">';
|
||||
|
||||
// Lettura sessioni di lavoro
|
||||
$sessioni = $intervento->sessioni;
|
||||
|
@ -83,15 +76,15 @@ if (!empty($interventi)) {
|
|||
<table class="table table-striped table-condensed table-bordered">
|
||||
<tr>
|
||||
<th>'.tr('Tecnico').'</th>
|
||||
<th width="230">'.tr('Tipo attività').'</th>
|
||||
<th width="120">'.tr('Ore').'</th>
|
||||
<th width="120">'.tr('Km').'</th>
|
||||
<th width="120">'.tr('Costo ore').'</th>
|
||||
<th width="120">'.tr('Costo km').'</th>
|
||||
<th width="120">'.tr('Diritto ch.').'</th>
|
||||
<th width="120">'.tr('Prezzo ore').'</th>
|
||||
<th width="120">'.tr('Prezzo km').'</th>
|
||||
<th width="120">'.tr('Diritto ch.').'</th>
|
||||
<th width="210">'.tr('Tipo attività').'</th>
|
||||
<th width="110">'.tr('Ore').'</th>
|
||||
<th width="110">'.tr('Km').'</th>
|
||||
<th width="110">'.tr('Costo ore').'</th>
|
||||
<th width="110">'.tr('Costo km').'</th>
|
||||
<th width="110">'.tr('Diritto ch.').'</th>
|
||||
<th width="110">'.tr('Prezzo ore').'</th>
|
||||
<th width="110">'.tr('Prezzo km').'</th>
|
||||
<th width="110">'.tr('Diritto ch.').'</th>
|
||||
</tr>';
|
||||
|
||||
foreach ($sessioni as $sessione) {
|
||||
|
@ -112,6 +105,23 @@ if (!empty($interventi)) {
|
|||
<td class="text-right success">'.moneyFormat($sessione->prezzo_viaggio).$sconto_km.'</td>
|
||||
<td class="text-right success">'.moneyFormat($sessione->prezzo_diritto_chiamata).'</td>
|
||||
</tr>';
|
||||
|
||||
// Raggruppamento per tipologia descrizione
|
||||
$tipologie[$sessione->tipo->descrizione]['ore'] += $sessione->ore;
|
||||
$tipologie[$sessione->tipo->descrizione]['costo'] += $sessione->costo_manodopera + $sessione->costo_viaggio + $sessione->costo_diritto_chiamata;
|
||||
$tipologie[$sessione->tipo->descrizione]['ricavo'] += $sessione->prezzo_manodopera - $sessione->sconto_totale_manodopera + $sessione->prezzo_viaggio - $sessione->sconto_totale_viaggio + $sessione->prezzo_diritto_chiamata - $sessione->sconto_totale_viaggio;
|
||||
|
||||
// Raggruppamento per tecnico
|
||||
$tecnici[$sessione->anagrafica->ragione_sociale]['ore'] += $sessione->ore;
|
||||
$tecnici[$sessione->anagrafica->ragione_sociale]['km'] += $sessione->km;
|
||||
$tecnici[$sessione->anagrafica->ragione_sociale]['costo'] += $sessione->costo_manodopera + $sessione->costo_viaggio + $sessione->costo_diritto_chiamata;
|
||||
$tecnici[$sessione->anagrafica->ragione_sociale]['ricavo'] += $sessione->prezzo_manodopera - $sessione->sconto_totale_manodopera + $sessione->prezzo_viaggio - $sessione->sconto_totale_viaggio + $sessione->prezzo_diritto_chiamata - $sessione->sconto_totale_viaggio;
|
||||
|
||||
// Raggruppamento per stato intervento
|
||||
$stati_intervento[$intervento->stato->descrizione]['colore'] = $intervento->stato->colore;
|
||||
$stati_intervento[$intervento->stato->descrizione]['ore'] += $sessione->ore;
|
||||
$stati_intervento[$intervento->stato->descrizione]['costo'] += $sessione->costo_manodopera + $sessione->costo_viaggio + $sessione->costo_diritto_chiamata;
|
||||
$stati_intervento[$intervento->stato->descrizione]['ricavo'] += $sessione->prezzo_manodopera - $sessione->sconto_totale_manodopera + $sessione->prezzo_viaggio - $sessione->sconto_totale_viaggio + $sessione->prezzo_diritto_chiamata - $sessione->sconto_totale_viaggio;
|
||||
}
|
||||
|
||||
echo '
|
||||
|
@ -142,6 +152,10 @@ if (!empty($interventi)) {
|
|||
<td class="text-right danger">'.moneyFormat($articolo->spesa).'</td>
|
||||
<td class="text-right success">'.moneyFormat($articolo->imponibile).$sconto.'</td>
|
||||
</tr>';
|
||||
|
||||
// Raggruppamento per categoria articolo
|
||||
$materiali[$articolo->articolo->categoria->nome]['costo'] += $articolo->spesa;
|
||||
$materiali[$articolo->articolo->categoria->nome]['ricavo'] += $articolo->imponibile - $articolo->sconto;
|
||||
}
|
||||
|
||||
echo '
|
||||
|
@ -184,11 +198,11 @@ if (!empty($interventi)) {
|
|||
}
|
||||
|
||||
$array_interventi = $interventi->toArray();
|
||||
$totale_ore = sum(array_column($array_interventi, 'ore_totali'));
|
||||
$totale_km = sum(array_column($array_interventi, 'km_totali'));
|
||||
$totale_costo = sum(array_column($array_interventi, 'spesa'));
|
||||
$totale_addebito = sum(array_column($array_interventi, 'imponibile'));
|
||||
$totale = sum(array_column($array_interventi, 'totale_imponibile'));
|
||||
$totale_ore = sum(array_column($array_interventi, 'ore_totali'));
|
||||
|
||||
// Totali
|
||||
echo '
|
||||
|
@ -212,47 +226,11 @@ if (!empty($interventi)) {
|
|||
<big><b>'.moneyFormat($totale_costo).'</b></big>
|
||||
</td>';
|
||||
|
||||
echo '
|
||||
<td class="text-right">
|
||||
<big><b>'.moneyFormat($totale_addebito).'</b></big>
|
||||
</td>';
|
||||
|
||||
echo '
|
||||
<td class="text-right">
|
||||
<big><b>'.moneyFormat($totale).'</b></big>
|
||||
</td>
|
||||
</tr>';
|
||||
|
||||
$stati = $interventi->groupBy('idstatointervento');
|
||||
if (count($stati) > 0) {
|
||||
// Totali per stato
|
||||
echo '
|
||||
<tr>
|
||||
<td colspan="6">
|
||||
<br><b>'.tr('Totale interventi per stato', [], ['upper' => true]).'</b>
|
||||
</td>
|
||||
</tr>';
|
||||
|
||||
foreach ($stati as $interventi_collegati) {
|
||||
$stato = $interventi_collegati->first()->stato;
|
||||
$totale_stato = sum(array_column($interventi_collegati->toArray(), 'totale_imponibile'));
|
||||
|
||||
echo '
|
||||
<tr>
|
||||
<td colspan="3"></td>
|
||||
|
||||
<td class="text-right" colspan="2" style="background:'.$stato->colore.';">
|
||||
<big><b>'.$stato->descrizione.':</b></big>
|
||||
</td>
|
||||
|
||||
<td class="text-right">
|
||||
<big><b>'.moneyFormat($totale_stato).'</b></big>
|
||||
</td>
|
||||
</tr>';
|
||||
}
|
||||
}
|
||||
|
||||
echo '
|
||||
</tr>
|
||||
</table>';
|
||||
}
|
||||
|
||||
|
@ -277,6 +255,114 @@ if ($diff > 0) {
|
|||
echo '
|
||||
</b></big></span>
|
||||
<br><br>
|
||||
|
||||
<div class="row">
|
||||
<div class="col-md-6">
|
||||
<table class="table text-left table-striped table-bordered">
|
||||
<tr>
|
||||
<th>'.tr('Tipologia').'</th>
|
||||
<th width="10%">'.tr('Ore').'</th>
|
||||
<th width="16%">'.tr('Costo').'</th>
|
||||
<th width="16%">'.tr('Ricavo').'</th>
|
||||
<th width="23%">'.tr('Margine').'</th>
|
||||
</tr>';
|
||||
ksort($tipologie);
|
||||
foreach ($tipologie as $key => $tipologia){
|
||||
$margine = $tipologia['ricavo'] - $tipologia['costo'];
|
||||
$margine_prc = ($tipologia['ricavo'] && $tipologia['costo']) ? (int)((($tipologia['ricavo'] / $tipologia['costo']) - 1) * 100) : 100;
|
||||
echo '
|
||||
<tr>
|
||||
<td>'.$key.'</td>
|
||||
<td class="text-right">'.Translator::numberToLocale($tipologia['ore']).'</td>
|
||||
<td class="text-right">'.Translator::numberToLocale($tipologia['costo']).' €</td>
|
||||
<td class="text-right">'.Translator::numberToLocale($tipologia['ricavo']).' €</td>
|
||||
<td class="text-right '.($margine>0 ? 'bg-success' : 'bg-danger').'">'.Translator::numberToLocale($margine).' € ('.$margine_prc.'%)</td>
|
||||
</tr>';
|
||||
}
|
||||
echo '
|
||||
</table>
|
||||
</div>
|
||||
|
||||
<div class="col-md-6">
|
||||
<table class="table text-left table-striped table-bordered">
|
||||
<tr>
|
||||
<th>'.tr('Tecnici').'</th>
|
||||
<th width="10%">'.tr('Ore').'</th>
|
||||
<th width="7%">'.tr('km').'</th>
|
||||
<th width="16%">'.tr('Costo').'</th>
|
||||
<th width="16%">'.tr('Ricavo').'</th>
|
||||
<th width="23%">'.tr('Margine').'</th>
|
||||
</tr>';
|
||||
ksort($tecnici);
|
||||
foreach ($tecnici as $key => $tecnico){
|
||||
$margine = $tecnico['ricavo'] - $tecnico['costo'];
|
||||
$margine_prc = ($tecnico['ricavo'] && $tecnico['costo']) ? (int)((($tecnico['ricavo'] / $tecnico['costo']) - 1) * 100) : 100;
|
||||
echo '
|
||||
<tr>
|
||||
<td>'.$key.'</td>
|
||||
<td class="text-right">'.Translator::numberToLocale($tecnico['ore']).'</td>
|
||||
<td class="text-right">'.(int)$tecnico['km'].'</td>
|
||||
<td class="text-right">'.Translator::numberToLocale($tecnico['costo']).' €</td>
|
||||
<td class="text-right">'.Translator::numberToLocale($tecnico['ricavo']).' €</td>
|
||||
<td class="text-right '.($margine>0 ? 'bg-success' : 'bg-danger').'">'.Translator::numberToLocale($margine).' € ('.$margine_prc.'%)</td>
|
||||
</tr>';
|
||||
}
|
||||
echo '
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="row">
|
||||
<div class="col-md-6">
|
||||
<table class="table text-left table-striped table-bordered">
|
||||
<tr>
|
||||
<th>'.tr('Stato').'</th>
|
||||
<th width="10%">'.tr('Ore').'</th>
|
||||
<th width="16%">'.tr('Costo').'</th>
|
||||
<th width="16%">'.tr('Ricavo').'</th>
|
||||
<th width="23%">'.tr('Margine').'</th>
|
||||
</tr>';
|
||||
ksort($stati_intervento);
|
||||
foreach ($stati_intervento as $key => $stato){
|
||||
$margine = $stato['ricavo'] - $stato['costo'];
|
||||
$margine_prc = ($stato['ricavo'] && $stato['costo']) ? (int)((($stato['ricavo'] / $stato['costo']) - 1) * 100) : 100;
|
||||
echo '
|
||||
<tr>
|
||||
<td><div class="img-circle" style="width:18px; height:18px; position:relative; bottom:-2px; background:'.$stato['colore'].'; float:left;"></div> '.$key.'</td>
|
||||
<td class="text-right">'.Translator::numberToLocale($stato['ore']).'</td>
|
||||
<td class="text-right">'.Translator::numberToLocale($stato['costo']).' €</td>
|
||||
<td class="text-right">'.Translator::numberToLocale($stato['ricavo']).' €</td>
|
||||
<td class="text-right '.($margine>0 ? 'bg-success' : 'bg-danger').'">'.Translator::numberToLocale($margine).' € ('.$margine_prc.'%)</td>
|
||||
</tr>';
|
||||
}
|
||||
echo '
|
||||
</table>
|
||||
</div>
|
||||
|
||||
<div class="col-md-6">
|
||||
<table class="table text-left table-striped table-bordered">
|
||||
<tr>
|
||||
<th>'.tr('Materiale').'</th>
|
||||
<th width="16%">'.tr('Costo').'</th>
|
||||
<th width="16%">'.tr('Ricavo').'</th>
|
||||
<th width="23%">'.tr('Margine').'</th>
|
||||
</tr>';
|
||||
ksort($materiali);
|
||||
foreach ($materiali as $key => $materiale){
|
||||
$margine = $materiale['ricavo'] - $materiale['costo'];
|
||||
$margine_prc = ($materiale['ricavo'] && $materiale['costo']) ? (int)((($materiale['ricavo'] / $materiale['costo']) - 1) * 100) : 100;
|
||||
echo '
|
||||
<tr>
|
||||
<td>'.$key.'</td>
|
||||
<td class="text-right">'.Translator::numberToLocale($materiale['costo']).' €</td>
|
||||
<td class="text-right">'.Translator::numberToLocale($materiale['ricavo']).' €</td>
|
||||
<td class="text-right '.($margine>0 ? 'bg-success' : 'bg-danger').'">'.Translator::numberToLocale($margine).' € ('.$margine_prc.'%)</td>
|
||||
</tr>';
|
||||
}
|
||||
echo '
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
</div>';
|
||||
|
||||
/*
|
||||
|
|
|
@ -4,6 +4,7 @@ return [
|
|||
'an_anagrafiche',
|
||||
'an_anagrafiche_agenti',
|
||||
'an_nazioni',
|
||||
'an_mansioni',
|
||||
'an_referenti',
|
||||
'an_relazioni',
|
||||
'an_sedi',
|
||||
|
@ -54,6 +55,7 @@ return [
|
|||
'em_accounts',
|
||||
'em_templates',
|
||||
'em_newsletters',
|
||||
'em_mansioni_template',
|
||||
'em_lists',
|
||||
'em_list_receiver',
|
||||
'em_emails',
|
||||
|
|
Loading…
Reference in New Issue