2017-08-04 16:28:16 +02:00
< ? php
2020-09-07 15:04:06 +02:00
/*
* OpenSTAManager : il software gestionale open source per l ' assistenza tecnica e la fatturazione
2021-01-20 15:08:51 +01:00
* Copyright ( C ) DevCode s . r . l .
2020-09-07 15:04:06 +02:00
*
* This program is free software : you can redistribute it and / or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation , either version 3 of the License , or
* ( at your option ) any later version .
*
* This program is distributed in the hope that it will be useful ,
* but WITHOUT ANY WARRANTY ; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE . See the
* GNU General Public License for more details .
*
* You should have received a copy of the GNU General Public License
* along with this program . If not , see < https :// www . gnu . org / licenses />.
*/
2017-08-04 16:28:16 +02:00
2020-09-14 10:49:23 +02:00
include_once __DIR__ . '/init.php' ;
2017-08-04 16:28:16 +02:00
echo '
2020-07-31 11:56:48 +02:00
< div class = " table-responsive " >
< table class = " table table-striped table-hover table-condensed table-bordered " >
< thead >
< tr >
< th width = " 35 " class = " text-center " > '.tr(' #').'</th>
< th > '.tr(' Descrizione ').' </ th >
< th class = " text-center tip " width = " 150 " title = " '.tr('da evadere').' / '.tr('totale').' " > '.tr(' Q . tà ').' < i class = " fa fa-question-circle-o " ></ i ></ th >
< th class = " text-center " width = " 150 " > '.tr(' Prezzo unitario ').' </ th >
< th class = " text-center " width = " 150 " > '.tr(' Iva unitaria ').' </ th >
< th class = " text-center " width = " 150 " > '.tr(' Importo ').' </ th >
< th width = " 100 " ></ th >
</ tr >
</ thead >
< tbody class = " sortable " > ' ;
2017-08-04 16:28:16 +02:00
2020-01-17 17:31:07 +01:00
// Righe documento
$righe = $preventivo -> getRighe ();
2020-09-11 09:04:06 +02:00
$num = 0 ;
foreach ( $righe as $riga ) {
++ $num ;
2018-06-23 18:35:08 +02:00
echo '
2020-07-31 11:56:48 +02:00
< tr data - id = " '. $riga->id .' " data - type = " '.get_class( $riga ).' " >
< td class = " text-center " >
2020-09-11 09:04:06 +02:00
'.$num.'
2020-09-15 12:20:01 +02:00
</ td >
< td > ' ;
// Aggiunta dei riferimenti ai documenti
2020-09-22 20:28:37 +02:00
if ( $riga -> hasOriginalComponent ()) {
2020-09-15 12:20:01 +02:00
echo '
2020-09-22 20:28:37 +02:00
< small class = " pull-right text-right text-muted " > '.reference($riga->getOriginalComponent()->getDocument(), tr(' Origine ')).' </ small > ' ;
2020-09-15 12:20:01 +02:00
}
2020-05-29 15:58:47 +02:00
2019-05-04 06:39:18 +02:00
// Descrizione
$descrizione = nl2br ( $riga -> descrizione );
if ( $riga -> isArticolo ()) {
2020-07-06 13:32:43 +02:00
$descrizione = Modules :: link ( 'Articoli' , $riga -> idarticolo , $riga -> codice . ' - ' . $descrizione );
2018-06-23 18:35:08 +02:00
}
echo '
2020-07-31 11:56:48 +02:00
'.$descrizione.'
</ td > ' ;
2017-08-04 16:28:16 +02:00
2019-05-04 06:39:18 +02:00
if ( $riga -> isDescrizione ()) {
2018-01-18 19:03:06 +01:00
echo '
2020-07-31 11:56:48 +02:00
< td ></ td >
< td ></ td >
< td ></ td >
< td ></ td > ' ;
2019-05-04 06:39:18 +02:00
} else {
2020-02-28 11:38:24 +01:00
// Quantità e unità di misura
2019-05-04 06:39:18 +02:00
echo '
2020-07-31 11:56:48 +02:00
< td class = " text-center " >
'.numberFormat($riga->qta_rimanente, ' qta ').' / '.numberFormat($riga->qta, ' qta ').' '.$riga->um.'
</ td > ' ;
2017-08-04 16:28:16 +02:00
2020-02-28 11:38:24 +01:00
// Prezzi unitari
2018-01-18 19:03:06 +01:00
echo '
2020-07-31 11:56:48 +02:00
< td class = " text-right " >
' . moneyFormat ( $riga -> prezzo_unitario_corrente );
2017-08-04 16:28:16 +02:00
2020-02-28 11:38:24 +01:00
if ( $dir == 'entrata' && $riga -> costo_unitario != 0 ) {
echo '
2020-07-31 11:56:48 +02:00
< br >< small class = " text-muted " >
'.tr(' Acquisto ').' : '.moneyFormat($riga->costo_unitario).'
</ small > ' ;
2020-02-28 11:38:24 +01:00
}
2017-08-04 16:28:16 +02:00
2019-07-17 18:30:20 +02:00
if ( abs ( $riga -> sconto_unitario ) > 0 ) {
2020-02-15 14:11:44 +01:00
$text = discountInfo ( $riga );
2019-07-11 17:44:42 +02:00
2018-06-23 18:35:08 +02:00
echo '
2020-07-31 11:56:48 +02:00
< br >< small class = " label label-danger " > '.$text.' </ small > ' ;
2017-08-04 16:28:16 +02:00
}
2020-02-28 11:38:24 +01:00
echo '
2020-07-31 11:56:48 +02:00
</ td > ' ;
2017-08-04 16:28:16 +02:00
2020-02-28 11:38:24 +01:00
// Iva
2018-06-23 18:35:08 +02:00
echo '
2020-07-31 11:56:48 +02:00
< td class = " text-right " >
2021-02-23 11:34:37 +01:00
'.moneyFormat($riga->iva_unitaria_scontata).'
2020-07-31 11:56:48 +02:00
< br >< small class = " '.(( $riga->aliquota ->deleted_at) ? 'text-red' : '').' text-muted " > '.$riga->aliquota->descrizione.(($riga->aliquota->esente) ? ' ( '.$riga->aliquota->codice_natura_fe.' ) ' : null).' </ small >
</ td > ' ;
2017-08-04 16:28:16 +02:00
2020-02-28 11:38:24 +01:00
// Importo
2018-06-23 18:35:08 +02:00
echo '
2020-07-31 11:56:48 +02:00
< td class = " text-right " >
'.moneyFormat($riga->importo).'
</ td > ' ;
2018-06-23 18:35:08 +02:00
}
2018-12-23 14:25:20 +01:00
2018-06-23 18:35:08 +02:00
// Possibilità di rimuovere una riga solo se il preventivo non è stato pagato
echo '
2020-07-31 11:56:48 +02:00
< td class = " text-center " > ' ;
2017-08-04 16:28:16 +02:00
2019-09-18 16:43:57 +02:00
if ( empty ( $record [ 'is_completato' ])) {
2019-05-04 06:39:18 +02:00
echo '
2020-07-31 11:56:48 +02:00
< div class = " btn-group " >
< a class = " btn btn-xs btn-warning " title = " '.tr('Modifica riga').' " onclick = " modificaRiga(this) " >
< i class = " fa fa-edit " ></ i >
</ a >
< a class = " btn btn-xs btn-danger " title = " '.tr('Rimuovi riga').' " onclick = " rimuoviRiga(this) " >
< i class = " fa fa-trash " ></ i >
</ a >
< a class = " btn btn-xs btn-default handle " title = " '.tr('Modifica ordine delle righe').' " >
< i class = " fa fa-sort " ></ i >
</ a >
</ div > ' ;
2018-06-23 18:35:08 +02:00
}
2019-05-04 00:32:28 +02:00
2018-06-23 18:35:08 +02:00
echo '
2020-07-31 11:56:48 +02:00
</ td >
</ tr > ' ;
2017-08-04 16:28:16 +02:00
}
echo '
2020-07-31 11:56:48 +02:00
</ tbody > ' ;
2017-08-04 16:28:16 +02:00
2019-07-12 17:35:14 +02:00
// Calcoli
$imponibile = abs ( $preventivo -> imponibile );
$sconto = $preventivo -> sconto ;
$totale_imponibile = abs ( $preventivo -> totale_imponibile );
$iva = abs ( $preventivo -> iva );
$totale = abs ( $preventivo -> totale );
2021-04-06 15:10:55 +02:00
$sconto_finale = $preventivo -> getScontoFinale ();
$netto_a_pagare = $preventivo -> netto ;
2019-07-12 17:35:14 +02:00
2019-07-18 09:42:51 +02:00
// Totale imponibile scontato
echo '
2020-07-31 11:56:48 +02:00
< tr >
< td colspan = " 5 " class = " text-right " >
< b > '.tr(' Imponibile ', [], [' upper ' => true]).' :</ b >
</ td >
< td class = " text-right " >
'.moneyFormat($preventivo->imponibile, 2).'
</ td >
< td ></ td >
</ tr > ' ;
2017-08-04 16:28:16 +02:00
2019-07-12 17:35:14 +02:00
// SCONTO
if ( ! empty ( $sconto )) {
2017-08-04 16:28:16 +02:00
echo '
2020-07-31 11:56:48 +02:00
< tr >
< td colspan = " 5 " class = " text-right " >
< b >< span class = " tip " title = " '.tr('Un importo positivo indica uno sconto, mentre uno negativo indica una maggiorazione').' " > < i class = " fa fa-question-circle-o " ></ i > '.tr(' Sconto / maggiorazione ', [], [' upper ' => true]).' :</ span ></ b >
</ td >
< td class = " text-right " >
'.moneyFormat($preventivo->sconto, 2).'
</ td >
< td ></ td >
</ tr > ' ;
2017-08-04 16:28:16 +02:00
2019-05-04 06:39:18 +02:00
// Totale imponibile scontato
2017-08-04 16:28:16 +02:00
echo '
2020-07-31 11:56:48 +02:00
< tr >
< td colspan = " 5 " class = " text-right " >
< b > '.tr(' Totale imponibile ', [], [' upper ' => true]).' :</ b >
</ td >
< td class = " text-right " >
'.moneyFormat($totale_imponibile, 2).'
</ td >
< td ></ td >
</ tr > ' ;
2017-08-04 16:28:16 +02:00
}
// Totale iva
echo '
2020-07-31 11:56:48 +02:00
< tr >
< td colspan = " 5 " class = " text-right " >
< b > '.tr(' Iva ', [], [' upper ' => true]).' :</ b >
</ td >
< td class = " text-right " >
'.moneyFormat($preventivo->iva, 2).'
</ td >
< td ></ td >
</ tr > ' ;
2017-08-04 16:28:16 +02:00
2019-09-12 09:31:55 +02:00
// Totale
2017-08-04 16:28:16 +02:00
echo '
2020-07-31 11:56:48 +02:00
< tr >
< td colspan = " 5 " class = " text-right " >
< b > '.tr(' Totale ', [], [' upper ' => true]).' :</ b >
</ td >
< td class = " text-right " >
'.moneyFormat($preventivo->totale, 2).'
</ td >
< td ></ td >
</ tr > ' ;
2021-04-12 15:51:27 +02:00
2021-04-06 15:10:55 +02:00
// SCONTO FINALE
if ( ! empty ( $sconto_finale )) {
echo '
< tr >
< td colspan = " 5 " class = " text-right " >
< b > '.tr(' Sconto finale ', [], [' upper ' => true]).' :</ b >
</ td >
< td class = " text-right " >
'.moneyFormat($sconto_finale, 2).'
</ td >
< td ></ td >
</ tr > ' ;
}
// NETTO A PAGARE
if ( $totale != $netto_a_pagare ) {
echo '
< tr >
< td colspan = " 5 " class = " text-right " >
< b > '.tr(' Netto a pagare ', [], [' upper ' => true]).' :</ b >
</ td >
< td class = " text-right " >
'.moneyFormat($netto_a_pagare, 2).'
</ td >
< td ></ td >
</ tr > ' ;
}
2017-08-04 16:28:16 +02:00
2019-09-12 09:31:55 +02:00
// Margine
$margine = $preventivo -> margine ;
2020-03-19 12:26:41 +01:00
$margine_class = ( $margine <= 0 and $preventivo -> totale > 0 ) ? 'danger' : 'success' ;
$margine_icon = ( $margine <= 0 and $preventivo -> totale > 0 ) ? 'warning' : 'check' ;
2019-09-12 09:31:55 +02:00
2019-12-24 12:45:23 +01:00
echo '
2020-07-31 11:56:48 +02:00
< tr >
< td colspan = " 5 " class = " text-right " >
'.tr(' Costi ').' :
</ td >
< td class = " text-right " >
'.moneyFormat($preventivo->spesa).'
</ td >
< td ></ td >
</ tr >
< tr >
< td colspan = " 5 " class = " text-right " >
'.tr(' Margine ( _PRC_ % ) ' , [
'_PRC_' => numberFormat ( $preventivo -> margine_percentuale ),
]) . ' :
</ td >
< td class = " text-right " class = " '. $margine_class .' " >
< i class = " fa fa-'. $margine_icon .' text-'. $margine_class .' " ></ i > '.moneyFormat($preventivo->margine).'
</ td >
< td ></ td >
</ tr > ' ;
2019-09-12 09:31:55 +02:00
2017-08-04 16:28:16 +02:00
echo '
2020-07-31 11:56:48 +02:00
</ table >
</ div > ' ;
2017-08-04 16:28:16 +02:00
echo '
< script >
2020-08-03 12:08:52 +02:00
async function modificaRiga ( button ) {
2020-09-03 11:55:15 +02:00
let riga = $ ( button ) . closest ( " tr " );
let id = riga . data ( " id " );
let type = riga . data ( " type " );
2020-07-06 13:19:20 +02:00
2020-08-03 12:08:52 +02:00
// Salvataggio via AJAX
2021-03-29 18:31:23 +02:00
await salvaForm ( " #edit-form " , {}, button );
2020-08-03 12:08:52 +02:00
2021-03-29 18:31:23 +02:00
// Chiusura tooltip
if ( $ ( button ) . hasClass ( " tooltipstered " ))
$ ( button ) . tooltipster ( " close " );
2020-08-03 12:43:30 +02:00
2021-03-29 18:31:23 +02:00
// Apertura modal
openModal ( " '.tr('Modifica riga').' " , " '. $module->fileurl ('row-edit.php').'?id_module= " + globals . id_module + " &id_record= " + globals . id_record + " &riga_id= " + id + " &riga_type= " + type );
2020-07-06 13:19:20 +02:00
}
function rimuoviRiga ( button ) {
swal ({
title : " '.tr('Rimuovere questa riga?').' " ,
html : " '.tr('Sei sicuro di volere rimuovere questa riga dal documento?').' '.tr( " L 'operazione è irreversibile").' . " ,
type : " warning " ,
showCancelButton : true ,
confirmButtonText : " '.tr('Sì').' "
}) . then ( function () {
2020-09-03 11:55:15 +02:00
let riga = $ ( button ) . closest ( " tr " );
let id = riga . data ( " id " );
let type = riga . data ( " type " );
2020-07-06 13:19:20 +02:00
$ . ajax ({
url : globals . rootdir + " /actions.php " ,
type : " POST " ,
dataType : " json " ,
data : {
id_module : globals . id_module ,
id_record : globals . id_record ,
op : " delete_riga " ,
riga_type : type ,
riga_id : id ,
},
success : function ( response ) {
location . reload ();
},
error : function () {
location . reload ();
}
});
}) . catch ( swal . noop );
}
2020-07-31 14:25:50 +02:00
$ ( document ) . ready ( function () {
2017-08-04 16:28:16 +02:00
$ ( " .sortable " ) . each ( function () {
$ ( this ) . sortable ({
axis : " y " ,
handle : " .handle " ,
cursor : " move " ,
dropOnEmpty : true ,
scroll : true ,
update : function ( event , ui ) {
2021-04-20 10:27:41 +02:00
let order = $ ( " .table .sortable tr[data-id] " ) . toArray () . map ( a => $ ( a ) . data ( " id " ))
2019-01-01 11:39:20 +01:00
2020-08-06 10:17:56 +02:00
$ . post ( globals . rootdir + " /actions.php " , {
2017-08-04 16:28:16 +02:00
id : ui . item . data ( " id " ),
id_module : '.$id_module.' ,
id_record : '.$id_record.' ,
op : " update_position " ,
2020-08-06 10:17:56 +02:00
order : order . join ( " , " ),
2017-08-04 16:28:16 +02:00
});
}
});
});
});
2020-06-09 16:59:26 +02:00
</ script > ' ;