2017-08-04 16:28:16 +02:00
< ? php
include_once __DIR__ . '/../../core.php' ;
2018-06-26 09:41:43 +02:00
include_once Modules :: filepath ( 'Fatture di vendita' , 'modutil.php' );
2018-06-22 17:52:51 +02:00
2018-12-23 16:16:59 +01:00
use Modules\Fatture\Descrizione ;
use Modules\Fatture\Articolo ;
use Modules\Fatture\Riga ;
// Righe fattura
//$rs = $dbo->fetchArray('SELECT *, round(sconto_unitario,'.setting('Cifre decimali per importi').') AS sconto_unitario, round(sconto,'.setting('Cifre decimali per importi').') AS sconto, round(subtotale,'.setting('Cifre decimali per importi').') AS subtotale, IFNULL((SELECT codice FROM mg_articoli WHERE id=idarticolo),"") AS codice, (SELECT descrizione FROM co_pianodeiconti3 WHERE co_pianodeiconti3.id=IF(co_righe_documenti.idconto = 0, (SELECT idconto FROM co_documenti WHERE iddocumento='.prepare($id_record).' LIMIT 1), co_righe_documenti.idconto)) AS descrizione_conto FROM `co_righe_documenti` WHERE iddocumento='.prepare($id_record).' ORDER BY `order`');
$righe = $fattura -> getRighe ();
2017-08-04 16:28:16 +02:00
echo '
< table class = " table table-striped table-hover table-condensed table-bordered " >
2018-01-14 17:46:00 +01:00
< thead >
< tr >
< th > '.tr(' Descrizione ').' </ th >
< th width = " 120 " > '.tr(' Q . tà ').' </ th >
< th width = " 80 " > '.tr(' U . m . ').' </ th >
2018-12-23 16:16:59 +01:00
< th width = " 120 " > '.tr(' Prezzo unitario ').' </ th >
2018-01-14 17:46:00 +01:00
< th width = " 120 " > '.tr(' Iva ').' </ th >
2018-07-10 16:01:28 +02:00
< th width = " 120 " > '.tr(' Importo ').' </ th >
2018-01-14 17:46:00 +01:00
< th width = " 60 " ></ th >
</ tr >
</ thead >
2017-08-04 16:28:16 +02:00
< tbody class = " sortable " > ' ;
2018-12-23 16:16:59 +01:00
foreach ( $righe as $riga ) {
// Valori assoluti
$riga [ 'qta' ] = abs ( $riga [ 'qta' ]);
$riga [ 'prezzo_unitario_acquisto' ] = abs ( $riga [ 'prezzo_unitario_acquisto' ]);
$riga [ 'subtotale' ] = abs ( $riga [ 'subtotale' ]);
$riga [ 'sconto_unitario' ] = abs ( $riga [ 'sconto_unitario' ]);
$riga [ 'sconto' ] = abs ( $riga [ 'sconto' ]);
$riga [ 'iva' ] = abs ( $riga [ 'iva' ]);
2018-07-03 17:28:02 +02:00
2018-12-23 16:16:59 +01:00
$extra = '' ;
2017-08-04 16:28:16 +02:00
2018-12-23 16:16:59 +01:00
$ref_modulo = null ;
$ref_id = null ;
2017-09-11 11:28:39 +02:00
2018-12-23 16:16:59 +01:00
// Preventivi
if ( ! empty ( $riga [ 'idpreventivo' ])) {
$delete = 'unlink_preventivo' ;
}
// Contratti
elseif ( ! empty ( $riga [ 'idcontratto' ])) {
$delete = 'unlink_contratto' ;
}
// Intervento
elseif ( ! empty ( $riga [ 'idintervento' ])) {
$delete = 'unlink_intervento' ;
}
// Articoli
elseif ( $riga instanceof Articolo ) {
$ref_modulo = Modules :: get ( 'Articoli' )[ 'id' ];
$ref_id = $riga [ 'idarticolo' ];
2017-08-04 16:28:16 +02:00
2018-12-23 16:16:59 +01:00
$riga [ 'descrizione' ] = ( ! empty ( $riga [ 'codice' ]) ? $riga [ 'codice' ] . ' - ' : '' ) . $riga [ 'descrizione' ];
2017-08-04 16:28:16 +02:00
2018-12-23 16:16:59 +01:00
$delete = 'unlink_articolo' ;
2017-08-04 16:28:16 +02:00
2018-12-23 16:16:59 +01:00
$extra = '' ;
$mancanti = 0 ;
}
// Righe generiche
else {
$delete = 'unlink_riga' ;
}
2018-11-30 16:10:15 +01:00
2018-12-23 16:16:59 +01:00
// Individuazione dei seriali
if ( ! empty ( $riga [ 'abilita_serial' ])) {
$serials = array_column ( $dbo -> fetchArray ( 'SELECT serial FROM mg_prodotti WHERE serial IS NOT NULL AND id_riga_documento=' . prepare ( $riga [ 'id' ])), 'serial' );
$mancanti = $riga [ 'qta' ] - count ( $serials );
2018-11-30 16:10:15 +01:00
2018-12-23 16:16:59 +01:00
if ( $mancanti > 0 ) {
$extra = 'class="warning"' ;
} else {
$mancanti = 0 ;
2018-10-30 10:27:44 +01:00
}
2018-12-23 16:16:59 +01:00
}
2017-08-04 16:28:16 +02:00
2018-12-23 16:16:59 +01:00
echo '
< tr data - id = " '. $riga['id'] .' " '.$extra.' >
2017-08-04 16:28:16 +02:00
< td >
2018-12-23 16:16:59 +01:00
'.Modules::link($ref_modulo, $ref_id, $riga[' descrizione ']).'
< small class = " pull-right text-muted " > '.$riga[' descrizione_conto '].' </ small > ' ;
2017-08-04 16:28:16 +02:00
2018-12-23 16:16:59 +01:00
if ( ! empty ( $riga [ 'abilita_serial' ])) {
if ( ! empty ( $mancanti )) {
echo '
2017-09-10 14:35:41 +02:00
< br >< b >< small class = " text-danger " > '.tr(' _NUM_ serial mancanti ' , [
'_NUM_' => $mancanti ,
]) . '</small></b>' ;
2018-12-23 16:16:59 +01:00
}
if ( ! empty ( $serials )) {
echo '
2017-09-04 12:02:29 +02:00
< br > '.tr(' SN ').' : '.implode(' , ' , $serials );
2017-08-04 16:28:16 +02:00
}
2018-12-23 16:16:59 +01:00
}
2017-08-04 16:28:16 +02:00
2018-12-23 16:16:59 +01:00
// Aggiunta dei riferimenti ai documenti
if ( ! empty ( $record [ 'ref_documento' ])) {
$data = $dbo -> fetchArray ( " SELECT IF(numero_esterno != '', numero_esterno, numero) AS numero, data FROM co_documenti WHERE id = " . prepare ( $record [ 'ref_documento' ]));
2018-07-04 12:57:53 +02:00
2018-12-23 16:16:59 +01:00
$text = tr ( 'Rif. fattura _NUM_ del _DATE_' , [
2018-07-04 12:57:53 +02:00
'_NUM_' => $data [ 0 ][ 'numero' ],
'_DATE_' => Translator :: dateToLocale ( $data [ 0 ][ 'data' ]),
]);
2018-12-23 16:16:59 +01:00
echo '
2018-07-18 15:20:10 +02:00
< br > '.Modules::link(' Fatture di vendita ', $record[' ref_documento ' ], $text , $text );
2018-12-23 16:16:59 +01:00
}
2017-09-05 17:31:58 +02:00
2018-12-23 16:16:59 +01:00
$ref = doc_references ( $r , $dir , [ 'iddocumento' ]);
if ( ! empty ( $ref )) {
echo '
2018-06-22 17:52:51 +02:00
< br > '.Modules::link($ref[' module '], $ref[' id '], $ref[' description '], $ref[' description ' ]);
2018-12-23 16:16:59 +01:00
}
2017-08-04 16:28:16 +02:00
2018-12-23 16:16:59 +01:00
echo '
2017-08-04 16:28:16 +02:00
</ td > ' ;
2018-12-23 16:16:59 +01:00
echo '
< td class = " text-center " > ' ;
2018-02-15 16:44:16 +01:00
2018-12-23 16:16:59 +01:00
if ( ! $riga instanceof Descrizione ) {
2018-02-15 16:44:16 +01:00
echo '
2018-12-23 16:16:59 +01:00
'.Translator::numberToLocale($riga->qta, ' qta ' );
}
echo '
2017-08-04 16:28:16 +02:00
</ td > ' ;
2018-12-23 16:16:59 +01:00
// Unità di misura
echo '
2018-01-18 19:03:06 +01:00
< td class = " text-center " > ' ;
2018-02-15 16:44:16 +01:00
2018-12-23 16:16:59 +01:00
if ( ! $riga instanceof Descrizione ) {
2018-01-18 19:03:06 +01:00
echo '
2018-12-23 16:16:59 +01:00
'.$riga[' um ' ];
}
echo '
2017-08-04 16:28:16 +02:00
</ td > ' ;
2018-12-23 16:16:59 +01:00
// Prezzi unitari
echo '
2018-12-23 14:25:20 +01:00
< td class = " text-right " > ' ;
2018-12-23 16:16:59 +01:00
if ( ! $riga instanceof Descrizione ) {
2017-08-04 16:28:16 +02:00
echo '
2018-12-23 16:16:59 +01:00
'.Translator::numberToLocale($riga->prezzo_unitario_vendita).' & euro ;
< br >< small >
'.tr(' Acquisto ').' : '.Translator::numberToLocale($riga->prezzo_unitario_acquisto).' & euro ;
</ small > ' ;
2018-02-15 16:44:16 +01:00
2018-12-23 16:16:59 +01:00
if ( $riga -> sconto_unitario > 0 ) {
2018-02-17 09:02:19 +01:00
echo '
2018-05-18 18:43:01 +02:00
< br >< small class = " label label-danger " > '.tr(' sconto _TOT_ _TYPE_ ' , [
2018-12-23 16:16:59 +01:00
'_TOT_' => Translator :: numberToLocale ( $riga -> sconto_unitario ),
'_TYPE_' => ( $riga -> tipo_sconto == 'PRC' ? '%' : '€' ),
2018-02-17 09:02:19 +01:00
]) . '</small>' ;
2017-08-04 16:28:16 +02:00
}
2018-12-23 16:16:59 +01:00
}
2018-02-15 16:44:16 +01:00
2018-12-23 16:16:59 +01:00
echo '
2017-08-04 16:28:16 +02:00
</ td > ' ;
2018-12-23 16:16:59 +01:00
// Iva
echo '
2018-01-18 19:03:06 +01:00
< td class = " text-right " > ' ;
2018-02-15 16:44:16 +01:00
2018-12-23 16:16:59 +01:00
if ( ! $riga instanceof Descrizione ) {
2018-01-18 19:03:06 +01:00
echo '
2018-12-23 16:16:59 +01:00
'.Translator::numberToLocale($riga->iva).' & euro ;
< br >< small class = " help-block " > '.$riga->desc_iva.' </ small > ' ;
}
2017-08-04 16:28:16 +02:00
2018-12-23 16:16:59 +01:00
echo '
2017-08-04 16:28:16 +02:00
</ td > ' ;
2018-12-23 16:16:59 +01:00
// Importo
echo '
< td class = " text-right " > ' ;
if ( ! $riga instanceof Descrizione ) {
2018-12-23 14:25:20 +01:00
echo '
2018-12-23 16:16:59 +01:00
'.Translator::numberToLocale($riga->imponibile_scontato).' & euro ;
< br >< small class = " text-'.( $riga->guadagno > 0 ? 'success' : 'danger').' " >
'.tr(' Guadagno ').' : '.Translator::numberToLocale($riga->guadagno).' & euro ;
</ small > ' ;
}
echo '
2018-12-23 14:25:20 +01:00
</ td > ' ;
2018-12-23 16:16:59 +01:00
// Possibilità di rimuovere una riga solo se la fattura non è pagata
echo '
2017-08-04 16:28:16 +02:00
< td class = " text-center " > ' ;
2018-12-23 16:16:59 +01:00
if ( $record [ 'stato' ] != 'Pagato' && $record [ 'stato' ] != 'Emessa' ) {
echo "
< form action = '".$rootdir.' / editor . php ? id_module = '.$id_module.' & id_record = '.$id_record."' method = 'post' id = 'delete-form-".$riga[' id ']."' role = 'form' >
2017-08-04 16:28:16 +02:00
< input type = 'hidden' name = 'backto' value = 'record-edit' >
2018-12-23 16:16:59 +01:00
< input type = 'hidden' name = 'idriga' value = '".$riga[' id ']."' >
2017-08-04 16:28:16 +02:00
< input type = 'hidden' name = 'op' value = '".$delete."' > " ;
2018-12-23 16:16:59 +01:00
if ( $riga instanceof Articolo ) {
2017-08-04 16:28:16 +02:00
echo "
2018-12-23 16:16:59 +01:00
< input type = 'hidden' name = 'idarticolo' value = '".$riga[' idarticolo ']."' > " ;
}
2017-08-04 16:28:16 +02:00
2018-12-23 16:16:59 +01:00
echo "
< div class = 'input-group-btn' > " ;
2017-08-04 16:28:16 +02:00
2018-12-23 16:16:59 +01:00
if ( empty ( $record [ 'is_reversed' ]) && $riga instanceof Articolo && $riga [ 'abilita_serial' ] && ( empty ( $riga [ 'idddt' ]) || empty ( $riga [ 'idintervento' ]))) {
2017-08-04 16:28:16 +02:00
echo "
2018-12-23 16:16:59 +01:00
< a class = 'btn btn-primary btn-xs' data - toggle = 'tooltip' title = 'Aggiorna SN...' onclick = \ " launch_modal( 'Aggiorna SN', ' " . $rootdir . '/modules/fatture/add_serial.php?id_module=' . $id_module . '&id_record=' . $id_record . '&idriga=' . $riga [ 'id' ] . '&idarticolo=' . $riga [ 'idarticolo' ] . " ', 1 ); \" ><i class='fa fa-barcode' aria-hidden='true'></i></a> " ;
}
2018-02-19 17:57:27 +01:00
2018-12-23 16:16:59 +01:00
echo "
< a class = 'btn btn-xs btn-warning' title = 'Modifica questa riga...' onclick = \ " launch_modal( 'Modifica riga', ' " . $rootdir . '/modules/fatture/row-edit.php?id_module=' . $id_module . '&id_record=' . $id_record . '&idriga=' . $riga [ 'id' ] . " ', 1 ); \" ><i class='fa fa-edit'></i></a>
< a class = 'btn btn-xs btn-danger' title = 'Rimuovi questa riga...' onclick = \ " if( confirm('Rimuovere questa riga dalla fattura?') ) { $ ('#delete-form- " . $riga [ 'id' ] . " ').submit(); } \" ><i class='fa fa-trash'></i></a>
2017-08-04 16:28:16 +02:00
</ div >
</ form > " ;
2018-12-23 16:16:59 +01:00
}
2017-08-04 16:28:16 +02:00
2018-12-23 16:16:59 +01:00
echo '
2017-08-04 16:28:16 +02:00
< div class = " handle clickable " style = " padding:10px " >
< i class = " fa fa-sort " ></ i >
</ div > ' ;
2018-12-23 16:16:59 +01:00
echo '
2017-08-04 16:28:16 +02:00
</ td >
</ tr > ' ;
2018-12-23 16:16:59 +01:00
}
$sconto_globale = $fattura -> scontoGlobale ;
if ( ! empty ( $sconto_globale )) {
echo '
< tr >
< td > '.$sconto_globale->descrizione.' </ td >
< td class = " text-center " > '.Translator::numberToLocale(1, ' qta ').' </ td >
< td ></ td >
< td class = " text-right " > '.Translator::numberToLocale($sconto_globale->totale).' & euro ; </ td >
< td class = " text-right " > '.Translator::numberToLocale($sconto_globale->iva).' & euro ; </ td >
< td class = " text-right " > '.Translator::numberToLocale($sconto_globale->totale).' & euro ; </ td >
</ tr > ' ;
2017-08-04 16:28:16 +02:00
}
echo '
</ tbody > ' ;
2018-12-23 16:16:59 +01:00
$imponibile = abs ( $fattura -> imponibile );
$sconto = abs ( $fattura -> sconto );
$imponibile_scontato = abs ( $fattura -> imponibile_scontato );
$iva = abs ( $fattura -> iva );
$totale = abs ( $fattura -> totale );
$netto_a_pagare = abs ( $fattura -> netto );
$guadagno = $fattura -> guadagno ;
2018-12-23 14:25:20 +01:00
2017-08-04 16:28:16 +02:00
// IMPONIBILE
echo '
< tr >
2018-12-23 16:16:59 +01:00
< td colspan = " 5 " class = " text-right " >
2017-09-10 14:35:41 +02:00
< b > '.tr(' Imponibile ', [], [' upper ' => true]).' :</ b >
2017-08-04 16:28:16 +02:00
</ td >
< td align = " right " >
'.Translator::numberToLocale($imponibile).' & euro ;
</ td >
< td ></ td >
</ tr > ' ;
// SCONTO
2018-12-23 16:16:59 +01:00
if ( ! empty ( $sconto )) {
2017-08-04 16:28:16 +02:00
echo '
< tr >
2018-12-23 16:16:59 +01:00
< td colspan = " 5 " class = " text-right " >
2017-09-10 14:35:41 +02:00
< b > '.tr(' Sconto ', [], [' upper ' => true]).' :</ b >
2017-08-04 16:28:16 +02:00
</ td >
< td align = " right " >
'.Translator::numberToLocale($sconto).' & euro ;
</ td >
< td ></ td >
</ tr > ' ;
// IMPONIBILE SCONTATO
echo '
< tr >
2018-12-23 16:16:59 +01:00
< td colspan = " 5 " class = " text-right " >
2017-09-10 14:35:41 +02:00
< b > '.tr(' Imponibile scontato ', [], [' upper ' => true]).' :</ b >
2017-08-04 16:28:16 +02:00
</ td >
< td align = " right " >
'.Translator::numberToLocale($imponibile_scontato).' & euro ;
</ td >
< td ></ td >
</ tr > ' ;
}
// RIVALSA INPS
2018-12-23 16:16:59 +01:00
if ( ! empty ( $fattura -> rivalsa_inps )) {
2017-08-04 16:28:16 +02:00
echo '
< tr >
2018-12-23 16:16:59 +01:00
< td colspan = " 5 " class = " text-right " >
2017-09-10 14:35:41 +02:00
< b > '.tr(' Rivalsa INPS ', [], [' upper ' => true]).' :</ b >
2017-08-04 16:28:16 +02:00
</ td >
< td align = " right " >
2018-12-23 16:16:59 +01:00
'.Translator::numberToLocale($fattura->rivalsa_inps).' & euro ;
2017-08-04 16:28:16 +02:00
</ td >
< td ></ td >
</ tr > ' ;
}
// IVA
2018-12-23 16:16:59 +01:00
if ( ! empty ( $iva )) {
2017-08-04 16:28:16 +02:00
echo '
< tr >
2018-12-23 16:16:59 +01:00
< td colspan = " 5 " class = " text-right " >
2017-09-10 14:35:41 +02:00
< b > '.tr(' Iva ', [], [' upper ' => true]).' :</ b >
2017-08-04 16:28:16 +02:00
</ td >
< td align = " right " >
2018-12-23 16:16:59 +01:00
'.Translator::numberToLocale($iva).' & euro ;
2017-08-04 16:28:16 +02:00
</ td >
< td ></ td >
</ tr > ' ;
}
// TOTALE
echo '
< tr >
2018-12-23 16:16:59 +01:00
< td colspan = " 5 " class = " text-right " >
2017-09-10 14:35:41 +02:00
< b > '.tr(' Totale ', [], [' upper ' => true]).' :</ b >
2017-08-04 16:28:16 +02:00
</ td >
< td align = " right " >
'.Translator::numberToLocale($totale).' & euro ;
</ td >
< td ></ td >
</ tr > ' ;
// Mostra marca da bollo se c'è
2018-12-23 16:16:59 +01:00
if ( ! empty ( $fattura -> bollo )) {
2017-08-04 16:28:16 +02:00
echo '
< tr >
2018-12-23 16:16:59 +01:00
< td colspan = " 5 " class = " text-right " >
2017-09-10 14:35:41 +02:00
< b > '.tr(' Marca da bollo ', [], [' upper ' => true]).' :</ b >
2017-08-04 16:28:16 +02:00
</ td >
< td align = " right " >
2018-12-23 16:16:59 +01:00
'.Translator::numberToLocale($fattura->bollo).' & euro ;
2017-08-04 16:28:16 +02:00
</ td >
< td ></ td >
</ tr > ' ;
}
// RITENUTA D'ACCONTO
2018-12-23 16:16:59 +01:00
if ( ! empty ( $fattura -> ritenuta_acconto )) {
2017-08-04 16:28:16 +02:00
echo '
< tr >
2018-12-23 16:16:59 +01:00
< td colspan = " 5 " class = " text-right " >
2017-09-10 14:35:41 +02:00
< b > '.tr("Ritenuta d' acconto " , [], ['upper' => true]).':</b>
2017-08-04 16:28:16 +02:00
</ td >
< td align = " right " >
2018-12-23 16:16:59 +01:00
'.Translator::numberToLocale($fattura->ritenuta_acconto).' & euro ;
2017-08-04 16:28:16 +02:00
</ td >
< td ></ td >
</ tr > ' ;
}
// NETTO A PAGARE
if ( $totale != $netto_a_pagare ) {
echo '
< tr >
2018-12-23 16:16:59 +01:00
< td colspan = " 5 " class = " text-right " >
2017-09-10 14:35:41 +02:00
< b > '.tr(' Netto a pagare ', [], [' upper ' => true]).' :</ b >
2017-08-04 16:28:16 +02:00
</ td >
< td align = " right " >
'.Translator::numberToLocale($netto_a_pagare).' & euro ;
</ td >
< td ></ td >
</ tr > ' ;
}
2018-12-23 14:25:20 +01:00
// GUADAGNO TOTALE
2018-12-23 16:16:59 +01:00
if ( $guadagno < 0 ) {
$guadagno_style = 'background-color: #FFC6C6; border: 3px solid red' ;
2018-12-23 14:25:20 +01:00
} else {
2018-12-23 16:16:59 +01:00
$guadagno_style = '' ;
2018-12-23 14:25:20 +01:00
}
echo '
< tr >
2018-12-23 16:16:59 +01:00
< td colspan = " 5 " class = " text-right " >
< b > '.tr(' Guadagno ', [], [' upper ' => true]).' :</ b >
2018-12-23 14:25:20 +01:00
</ td >
2018-12-23 16:16:59 +01:00
< td align = " right " style = " '. $guadagno_style .' " >
'.Translator::numberToLocale($guadagno).' & euro ;
2018-12-23 14:25:20 +01:00
</ td >
< td ></ td >
</ tr > ' ;
2017-08-04 16:28:16 +02:00
echo '
</ table > ' ;
echo '
< script >
$ ( document ) . ready ( function (){
$ ( " .sortable " ) . each ( function () {
$ ( this ) . sortable ({
axis : " y " ,
handle : " .handle " ,
cursor : " move " ,
dropOnEmpty : true ,
scroll : true ,
update : function ( event , ui ) {
2018-10-30 10:27:44 +01:00
var order = " " ;
$ ( " .table tr[data-id] " ) . each ( function (){
order += " , " + $ ( this ) . data ( " id " );
});
order = order . replace ( /^ , / , " " );
2018-12-23 16:16:59 +01:00
2017-08-04 16:28:16 +02:00
$ . post ( " '. $rootdir .'/actions.php " , {
id : ui . item . data ( " id " ),
id_module : '.$id_module.' ,
id_record : '.$id_record.' ,
op : " update_position " ,
2018-10-30 10:27:44 +01:00
order : order ,
2017-08-04 16:28:16 +02:00
});
}
});
});
});
</ script > ' ;