Gestione margine/ricarico

This commit is contained in:
Beppe 2022-07-28 15:22:08 +02:00
parent d85de431ee
commit a06746774c
8 changed files with 136 additions and 36 deletions

View File

@ -83,12 +83,13 @@ if ($options['dir'] == 'entrata') {
}
var guadagno = prezzo - sconto - provvigione - costo_unitario;
var margine = (((prezzo - sconto) * 100) / (costo_unitario + provvigione)) - 100;
var parent = $("#costo_unitario").closest("div").parent();
var ricarico = (((prezzo - sconto) / costo_unitario) - 1) * 100;
var margine = (1 - (costo_unitario / (prezzo - sconto))) * 100; var parent = $("#costo_unitario").closest("div").parent();
var div = $(".margine");
var mediaponderata = 0;
margine = isNaN(margine) || !isFinite(margine) ? 0: margine; // Fix per magine NaN
ricarico = isNaN(ricarico) || !isFinite(ricarico) ? 0: ricarico; // Fix per ricarico NaN
if ($("#idarticolo").val()) {
mediaponderata = parseFloat($("#idarticolo").selectData().media_ponderata);
@ -117,6 +118,17 @@ if ($options['dir'] == 'entrata') {
<small>&nbsp;%<small>\
</td>\
</tr>\
<tr>\
<td>\
<small>&nbsp;'.tr('Ricarico').':</small>\
</td>\
<td align=\"right\">\
<small>" + ricarico.toLocale() + "<small>\
</td>\
<td align=\"center\">\
<small>&nbsp;%<small>\
</td>\
</tr>\
<tr>\
<td>\
<small>&nbsp;'.tr('Costo medio').':</small>\

View File

@ -336,12 +336,14 @@ if (empty($totale_ore_contratto)) {
<th width="10%">'.tr('Ore').'</th>
<th width="16%">'.tr('Costo').'</th>
<th width="16%">'.tr('Ricavo').'</th>
<th width="23%">'.tr('Margine').'</th>
<th width="10%">'.tr('Margine').'</th>
<th width="10%">'.tr('Ricarico').'</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;
$margine_prc = (int)(1 - ($tipologia['costo'] / $tipologia['ricavo'])) * 100;
$ricarico_prc = ($tipologia['ricavo'] && $tipologia['costo']) ? (int)((($tipologia['ricavo'] / $tipologia['costo']) - 1) * 100) : 100;
echo '
<tr>
<td>'.$key.'</td>
@ -349,6 +351,7 @@ if (empty($totale_ore_contratto)) {
<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>
<td class="text-right '.($margine>0 ? 'bg-success' : 'bg-danger').'">'.Translator::numberToLocale($margine).' ('.$ricarico_prc.'%)</td>
</tr>';
}
echo '
@ -359,16 +362,18 @@ if (empty($totale_ore_contratto)) {
<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="10%">'.tr('Ore').'</th>
<th width="16%">'.tr('Costo').'</th>
<th width="16%">'.tr('Ricavo').'</th>
<th width="23%">'.tr('Margine').'</th>
<th width="10%">'.tr('Margine').'</th>
<th width="10%">'.tr('Ricarico').'</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;
$margine_prc = (int)(1 - ($tecnico['costo'] / $tecnico['ricavo'])) * 100;
$ricarico_prc = ($tecnico['ricavo'] && $tecnico['costo']) ? (int)((($tecnico['ricavo'] / $tecnico['costo']) - 1) * 100) : 100;
echo '
<tr>
<td>'.$key.'</td>
@ -377,6 +382,7 @@ if (empty($totale_ore_contratto)) {
<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>
<td class="text-right '.($margine>0 ? 'bg-success' : 'bg-danger').'">'.Translator::numberToLocale($margine).' ('.$ricarico_prc.'%)</td>
</tr>';
}
echo '
@ -392,12 +398,14 @@ if (empty($totale_ore_contratto)) {
<th width="10%">'.tr('Ore').'</th>
<th width="16%">'.tr('Costo').'</th>
<th width="16%">'.tr('Ricavo').'</th>
<th width="23%">'.tr('Margine').'</th>
<th width="10%">'.tr('Margine').'</th>
<th width="10%">'.tr('Ricarico').'</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;
$margine_prc = (int)(1 - ($stato['costo'] / $stato['ricavo'])) * 100;
$ricarico_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>
@ -405,6 +413,7 @@ if (empty($totale_ore_contratto)) {
<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>
<td class="text-right '.($margine>0 ? 'bg-success' : 'bg-danger').'">'.Translator::numberToLocale($margine).' ('.$ricarico_prc.'%)</td>
</tr>';
}
echo '
@ -418,14 +427,16 @@ if (empty($totale_ore_contratto)) {
<th width="8%">'.tr('Qtà').'</th>
<th width="16%">'.tr('Costo').'</th>
<th width="16%">'.tr('Ricavo').'</th>
<th width="23%">'.tr('Margine').'</th>
<th width="10%">'.tr('Margine').'</th>
<th width="10%">'.tr('Ricarico').'</th>
</tr>';
ksort($materiali_art);
foreach ($materiali_art as $key => $materiali_array1){
foreach ($materiali_array1 as $materiali_array2){
foreach ($materiali_array2 as $materiale){
$margine = $materiale['ricavo'] - $materiale['costo'];
$margine_prc = ($materiale['ricavo'] && $materiale['costo']) ? (int)((($materiale['ricavo'] / $materiale['costo']) - 1) * 100) : 100;
$margine_prc = (int)(1 - ($materiale['costo'] / $materiale['ricavo'])) * 100;
$ricarico_prc = ($materiale['ricavo'] && $materiale['costo']) ? (int)((($materiale['ricavo'] / $materiale['costo']) - 1) * 100) : 100;
echo '
<tr>
<td>'.Modules::link('Articoli', $materiale['id'], $key).'</td>
@ -433,6 +444,7 @@ if (empty($totale_ore_contratto)) {
<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>
<td class="text-right '.($margine>0 ? 'bg-success' : 'bg-danger').'">'.Translator::numberToLocale($margine).' ('.$ricarico_prc.'%)</td>
</tr>';
}
}
@ -441,7 +453,8 @@ if (empty($totale_ore_contratto)) {
ksort($materiali_righe);
foreach ($materiali_righe as $key => $materiale){
$margine = $materiale['ricavo'] - $materiale['costo'];
$margine_prc = ($materiale['ricavo'] && $materiale['costo']) ? (int)((($materiale['ricavo'] / $materiale['costo']) - 1) * 100) : 100;
$margine_prc = (int)(1 - ($materiale['costo'] / $materiale['ricavo'])) * 100;
$ricarico_prc = ($materiale['ricavo'] && $materiale['costo']) ? (int)((($materiale['ricavo'] / $materiale['costo']) - 1) * 100) : 100;
echo '
<tr>
<td>'.$key.'</td>
@ -449,6 +462,7 @@ if (empty($totale_ore_contratto)) {
<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>
<td class="text-right '.($margine>0 ? 'bg-success' : 'bg-danger').'">'.Translator::numberToLocale($margine).' ('.$ricarico_prc.'%)</td>
</tr>';
}
echo '

View File

@ -404,6 +404,16 @@ class Sessione extends Model
* @return float
*/
public function getMarginePercentualeAttribute()
{
return (1 - ($this->spesa / ($this->totale_imponibile))) * 100;
}
/**
* Restituisce il ricarico percentuale del documento.
*
* @return float
*/
public function getRicaricoPercentualeAttribute()
{
return $this->imponibile ? (($this->imponibile / $this->spesa) - 1) * 100 : 100;
}

View File

@ -282,12 +282,14 @@ if ($diff > 0) {
<th width="10%">'.tr('Ore').'</th>
<th width="16%">'.tr('Costo').'</th>
<th width="16%">'.tr('Ricavo').'</th>
<th width="23%">'.tr('Margine').'</th>
<th width="10%">'.tr('Margine').'</th>
<th width="10%">'.tr('Ricarico').'</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;
$margine_prc = (int)(1 - ($tipologia['costo'] / $tipologia['ricavo'])) * 100;
$ricarico_prc = ($tipologia['ricavo'] && $tipologia['costo']) ? (int)((($tipologia['ricavo'] / $tipologia['costo']) - 1) * 100) : 100;
echo '
<tr>
<td>'.$key.'</td>
@ -295,6 +297,7 @@ if ($diff > 0) {
<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>
<td class="text-right '.($margine>0 ? 'bg-success' : 'bg-danger').'">'.Translator::numberToLocale($margine).' ('.$ricarico_prc.'%)</td>
</tr>';
}
echo '
@ -305,16 +308,18 @@ if ($diff > 0) {
<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="10%">'.tr('Ore').'</th>
<th width="16%">'.tr('Costo').'</th>
<th width="16%">'.tr('Ricavo').'</th>
<th width="23%">'.tr('Margine').'</th>
<th width="10%">'.tr('Margine').'</th>
<th width="10%">'.tr('Ricarico').'</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;
$margine_prc = (int)(1 - ($tecnico['costo'] / $tecnico['ricavo'])) * 100;
$ricarico_prc = ($tecnico['ricavo'] && $tecnico['costo']) ? (int)((($tecnico['ricavo'] / $tecnico['costo']) - 1) * 100) : 100;
echo '
<tr>
<td>'.$key.'</td>
@ -323,6 +328,7 @@ if ($diff > 0) {
<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>
<td class="text-right '.($margine>0 ? 'bg-success' : 'bg-danger').'">'.Translator::numberToLocale($margine).' ('.$ricarico_prc.'%)</td>
</tr>';
}
echo '
@ -338,12 +344,14 @@ if ($diff > 0) {
<th width="10%">'.tr('Ore').'</th>
<th width="16%">'.tr('Costo').'</th>
<th width="16%">'.tr('Ricavo').'</th>
<th width="23%">'.tr('Margine').'</th>
<th width="10%">'.tr('Margine').'</th>
<th width="10%">'.tr('Ricarico').'</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;
$margine_prc = (int)(1 - ($stato['costo'] / $stato['ricavo'])) * 100;
$ricarico_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>
@ -351,6 +359,7 @@ if ($diff > 0) {
<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>
<td class="text-right '.($margine>0 ? 'bg-success' : 'bg-danger').'">'.Translator::numberToLocale($margine).' ('.$ricarico_prc.'%)</td>
</tr>';
}
echo '
@ -364,14 +373,16 @@ if ($diff > 0) {
<th width="8%">'.tr('Qtà').'</th>
<th width="16%">'.tr('Costo').'</th>
<th width="16%">'.tr('Ricavo').'</th>
<th width="23%">'.tr('Margine').'</th>
<th width="10%">'.tr('Margine').'</th>
<th width="10%">'.tr('Ricarico').'</th>
</tr>';
ksort($materiali_art);
foreach ($materiali_art as $key => $materiali_array1){
foreach ($materiali_array1 as $materiali_array2){
foreach ($materiali_array2 as $materiale){
$margine = $materiale['ricavo'] - $materiale['costo'];
$margine_prc = ($materiale['ricavo'] && $materiale['costo']) ? (int)((($materiale['ricavo'] / $materiale['costo']) - 1) * 100) : 100;
$margine_prc = (int)(1 - ($materiale['costo'] / $materiale['ricavo'])) * 100;
$ricarico_prc = ($materiale['ricavo'] && $materiale['costo']) ? (int)((($materiale['ricavo'] / $materiale['costo']) - 1) * 100) : 100;
echo '
<tr>
<td>'.Modules::link('Articoli', $materiale['id'], $key).'</td>
@ -379,6 +390,7 @@ if ($diff > 0) {
<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>
<td class="text-right '.($margine>0 ? 'bg-success' : 'bg-danger').'">'.Translator::numberToLocale($margine).' ('.$ricarico_prc.'%)</td>
</tr>';
}
}
@ -387,7 +399,8 @@ if ($diff > 0) {
ksort($materiali_righe);
foreach ($materiali_righe as $key => $materiale){
$margine = $materiale['ricavo'] - $materiale['costo'];
$margine_prc = ($materiale['ricavo'] && $materiale['costo']) ? (int)((($materiale['ricavo'] / $materiale['costo']) - 1) * 100) : 100;
$margine_prc = (int)(1 - ($materiale['costo'] / $materiale['ricavo'])) * 100;
$ricarico_prc = ($materiale['ricavo'] && $materiale['costo']) ? (int)((($materiale['ricavo'] / $materiale['costo']) - 1) * 100) : 100;
echo '
<tr>
<td>'.$key.'</td>
@ -395,6 +408,7 @@ if ($diff > 0) {
<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>
<td class="text-right '.($margine>0 ? 'bg-success' : 'bg-danger').'">'.Translator::numberToLocale($margine).' ('.$ricarico_prc.'%)</td>
</tr>';
}
echo '

View File

@ -281,12 +281,14 @@ if ($diff > 0) {
<th width="10%">'.tr('Ore').'</th>
<th width="16%">'.tr('Costo').'</th>
<th width="16%">'.tr('Ricavo').'</th>
<th width="23%">'.tr('Margine').'</th>
<th width="10%">'.tr('Margine').'</th>
<th width="10%">'.tr('Ricarico').'</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;
$margine_prc = (int)(1 - ($tipologia['costo'] / $tipologia['ricavo'])) * 100;
$ricarico_prc = ($tipologia['ricavo'] && $tipologia['costo']) ? (int)((($tipologia['ricavo'] / $tipologia['costo']) - 1) * 100) : 100;
echo '
<tr>
<td>'.$key.'</td>
@ -294,6 +296,7 @@ if ($diff > 0) {
<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>
<td class="text-right '.($margine>0 ? 'bg-success' : 'bg-danger').'">'.Translator::numberToLocale($margine).' ('.$ricarico_prc.'%)</td>
</tr>';
}
echo '
@ -304,16 +307,18 @@ if ($diff > 0) {
<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="10%">'.tr('Ore').'</th>
<th width="16%">'.tr('Costo').'</th>
<th width="16%">'.tr('Ricavo').'</th>
<th width="23%">'.tr('Margine').'</th>
<th width="10%">'.tr('Margine').'</th>
<th width="10%">'.tr('Ricarico').'</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;
$margine_prc = (int)(1 - ($tecnico['costo'] / $tecnico['ricavo'])) * 100;
$ricarico_prc = ($tecnico['ricavo'] && $tecnico['costo']) ? (int)((($tecnico['ricavo'] / $tecnico['costo']) - 1) * 100) : 100;
echo '
<tr>
<td>'.$key.'</td>
@ -322,6 +327,7 @@ if ($diff > 0) {
<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>
<td class="text-right '.($margine>0 ? 'bg-success' : 'bg-danger').'">'.Translator::numberToLocale($margine).' ('.$ricarico_prc.'%)</td>
</tr>';
}
echo '
@ -337,12 +343,14 @@ if ($diff > 0) {
<th width="10%">'.tr('Ore').'</th>
<th width="16%">'.tr('Costo').'</th>
<th width="16%">'.tr('Ricavo').'</th>
<th width="23%">'.tr('Margine').'</th>
<th width="10%">'.tr('Margine').'</th>
<th width="10%">'.tr('Ricarico').'</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;
$margine_prc = (int)(1 - ($stato['costo'] / $stato['ricavo'])) * 100;
$ricarico_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>
@ -350,6 +358,7 @@ if ($diff > 0) {
<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>
<td class="text-right '.($margine>0 ? 'bg-success' : 'bg-danger').'">'.Translator::numberToLocale($margine).' ('.$ricarico_prc.'%)</td>
</tr>';
}
echo '
@ -363,14 +372,16 @@ if ($diff > 0) {
<th width="8%">'.tr('Qtà').'</th>
<th width="16%">'.tr('Costo').'</th>
<th width="16%">'.tr('Ricavo').'</th>
<th width="23%">'.tr('Margine').'</th>
<th width="10%">'.tr('Margine').'</th>
<th width="10%">'.tr('Ricarico').'</th>
</tr>';
ksort($materiali_art);
foreach ($materiali_art as $key => $materiali_array1){
foreach ($materiali_array1 as $materiali_array2){
foreach ($materiali_array2 as $materiale){
$margine = $materiale['ricavo'] - $materiale['costo'];
$margine_prc = ($materiale['ricavo'] && $materiale['costo']) ? (int)((($materiale['ricavo'] / $materiale['costo']) - 1) * 100) : 100;
$margine_prc = (int)(1 - ($materiale['costo'] / $materiale['ricavo'])) * 100;
$ricarico_prc = ($materiale['ricavo'] && $materiale['costo']) ? (int)((($materiale['ricavo'] / $materiale['costo']) - 1) * 100) : 100;
echo '
<tr>
<td>'.Modules::link('Articoli', $materiale['id'], $key).'</td>
@ -378,6 +389,7 @@ if ($diff > 0) {
<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>
<td class="text-right '.($margine>0 ? 'bg-success' : 'bg-danger').'">'.Translator::numberToLocale($margine).' ('.$ricarico_prc.'%)</td>
</tr>';
}
}
@ -386,7 +398,8 @@ if ($diff > 0) {
ksort($materiali_righe);
foreach ($materiali_righe as $key => $materiale){
$margine = $materiale['ricavo'] - $materiale['costo'];
$margine_prc = ($materiale['ricavo'] && $materiale['costo']) ? (int)((($materiale['ricavo'] / $materiale['costo']) - 1) * 100) : 100;
$margine_prc = (int)(1 - ($materiale['costo'] / $materiale['ricavo'])) * 100;
$ricarico_prc = ($materiale['ricavo'] && $materiale['costo']) ? (int)((($materiale['ricavo'] / $materiale['costo']) - 1) * 100) : 100;
echo '
<tr>
<td>'.$key.'</td>
@ -394,6 +407,7 @@ if ($diff > 0) {
<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>
<td class="text-right '.($margine>0 ? 'bg-success' : 'bg-danger').'">'.Translator::numberToLocale($margine).' ('.$ricarico_prc.'%)</td>
</tr>';
}
echo '

View File

@ -306,8 +306,12 @@ if ($totale != $netto_a_pagare) {
// Margine
$margine = $preventivo->margine;
$margine_class = ($margine <= 0 and $preventivo->totale > 0) ? 'danger' : 'success';
$margine_icon = ($margine <= 0 and $preventivo->totale > 0) ? 'warning' : 'check';
$margine_class = ($margine <= 0 && $preventivo->totale > 0) ? 'danger' : 'success';
$margine_icon = ($margine <= 0 && $preventivo->totale > 0) ? 'warning' : 'check';
// Ricarico
$ricarico_class = ($margine <= 0 && $preventivo->totale > 0) ? 'danger' : 'success';
$ricarico_icon = ($margine <= 0 && $preventivo->totale > 0) ? 'warning' : 'check';
echo '
<tr>
@ -345,6 +349,18 @@ echo '
<i class="fa fa-'.$margine_icon.' text-'.$margine_class.'"></i> '.moneyFormat($preventivo->margine).'
</td>
<td></td>
</tr>
<tr>
<td colspan="7" class="text-right">
'.tr('Ricarico (_PRC_%)', [
'_PRC_' => numberFormat($preventivo->ricarico_percentuale),
]).':
</td>
<td class="text-right" class="'.$ricarico_class.'">
<i class="fa fa-'.$ricarico_icon.' text-'.$ricarico_class.'"></i> '.moneyFormat($preventivo->margine).'
</td>
<td></td>
</tr>';
echo '

View File

@ -350,11 +350,21 @@ abstract class Accounting extends Component
}
/**
* Restituisce il margine percentuale relativo all'elemento.
* Restituisce il margine percentuale del documento.
*
* @return float
*/
public function getMarginePercentualeAttribute()
{
return (1 - (($this->spesa + $this->provvigione) / ($this->totale_imponibile))) * 100;
}
/**
* Restituisce il ricarico percentuale del documento.
*
* @return float
*/
public function getRicaricoPercentualeAttribute()
{
return ($this->totale_imponibile && ($this->spesa || $this->provvigione)) ? (($this->totale_imponibile / ($this->spesa + $this->provvigione)) - 1) * 100 : 100;
}

View File

@ -230,12 +230,22 @@ abstract class Document extends Model implements ReferenceInterface, DocumentInt
return $this->calcola('margine');
}
/**
/**
* Restituisce il margine percentuale del documento.
*
* @return float
*/
public function getMarginePercentualeAttribute()
{
return (1 - ($this->spesa / ($this->totale_imponibile))) * 100;
}
/**
* Restituisce il ricarico percentuale del documento.
*
* @return float
*/
public function getRicaricoPercentualeAttribute()
{
return ($this->totale_imponibile && ($this->spesa || $this->provvigione)) ? (($this->totale_imponibile / ($this->spesa + $this->provvigione)) - 1) * 100 : 100;
}