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-11-20 15:50:15 +01:00
use Modules\Interventi\Intervento ;
2020-09-14 10:49:23 +02:00
include_once __DIR__ . '/init.php' ;
2017-08-04 16:28:16 +02:00
2024-03-15 12:33:20 +01:00
use Models\Plugin ;
2022-04-01 09:58:53 +02:00
$block_edit = ! empty ( $note_accredito ) || in_array ( $record [ 'stato' ], [ 'Emessa' , 'Pagato' , 'Parzialmente pagato' ]) || ! $abilita_genera ;
2023-05-24 17:15:29 +02:00
$order_row_desc = $_SESSION [ 'module_' . $id_module ][ 'order_row_desc' ];
$righe = $order_row_desc ? $fattura -> getRighe () -> sortByDesc ( 'created_at' ) : $fattura -> getRighe ();
2023-09-29 15:34:02 +02:00
$colspan = $dir == 'entrata' ? '8' : '7' ;
2022-04-01 09:58:53 +02:00
2017-08-04 16:28:16 +02:00
echo '
2023-09-29 15:34:02 +02:00
< div class = " table-responsive row-list " >
2020-07-31 11:56:48 +02:00
< table class = " table table-striped table-hover table-condensed table-bordered " >
< thead >
< tr >
2022-04-01 09:58:53 +02:00
< th width = " 5 " class = " text-center " > ' ;
2024-01-15 15:30:45 +01:00
if ( ! $block_edit && sizeof ( $righe ) > 0 ) {
echo '
2022-04-01 09:58:53 +02:00
< input id = " check_all " type = " checkbox " /> ' ;
2024-01-15 15:30:45 +01:00
}
echo '
2022-04-01 09:58:53 +02:00
</ th >
2020-07-31 11:56:48 +02:00
< th width = " 35 " class = " text-center " > '.tr(' #').'</th>
2023-11-15 12:03:36 +01:00
< th class = " text-left " style = " width:30%; " > '.tr(' Descrizione ').' </ th >
2023-09-29 15:34:02 +02:00
< th class = " text-center " width = " 120 " > '.tr(' Q . tà ').' </ th > ' ;
2024-01-15 15:30:45 +01:00
if ( $dir == 'entrata' ) {
echo '<th class="text-center" width="150">' . tr ( 'Costo unitario' ) . '</th>' ;
}
echo '
2023-09-29 15:34:02 +02:00
< th class = " text-center " width = " 180 " > '.tr(' Prezzo unitario ').' </ th >
< th class = " text-center " width = " 140 " > '.tr(' Sconto unitario ').' </ th >
< th class = " text-center " width = " 120 " > '.tr(' Iva unitaria ').' </ th >
< th class = " text-center " width = " 120 " > '.tr(' Importo ').' </ th >
2020-07-31 11:56:48 +02:00
< th width = " 120 " ></ th >
</ tr >
</ thead >
2022-04-01 09:58:53 +02:00
< tbody class = " sortable " id = " righe " > ' ;
2017-08-04 16:28:16 +02:00
2020-01-17 17:31:07 +01:00
// Righe documento
2020-09-11 09:04:06 +02:00
$num = 0 ;
foreach ( $righe as $riga ) {
2023-12-29 16:15:38 +01:00
$show_notifica = [];
2020-09-11 09:04:06 +02:00
++ $num ;
2018-12-23 16:16:59 +01:00
$extra = '' ;
2020-03-09 13:57:13 +01:00
$mancanti = 0 ;
2019-10-01 18:32:06 +02:00
$delete = 'delete_riga' ;
2019-07-23 15:39:00 +02:00
2018-12-23 16:16:59 +01:00
// Individuazione dei seriali
2020-03-09 13:57:13 +01:00
if ( $riga -> isArticolo () && ! empty ( $riga -> abilita_serial )) {
2020-01-17 17:31:07 +01:00
$serials = $riga -> serials ;
2020-03-09 13:57:13 +01:00
$mancanti = abs ( $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
}
2019-01-09 17:09:43 +01:00
2024-02-23 14:40:08 +01:00
// Imposto sfondo rosso alle righe con quantità a 0
if ( $riga -> qta == 0 ) {
$extra = 'class="danger"' ;
}
2019-01-10 18:41:25 +01:00
$extra_riga = '' ;
2020-03-09 13:57:13 +01:00
if ( ! $riga -> isDescrizione ()) {
// Informazioni su CIG, CUP, ...
2020-09-22 20:28:37 +02:00
if ( $riga -> hasOriginalComponent ()) {
$documento_originale = $riga -> getOriginalComponent () -> getDocument ();
2020-03-09 13:57:13 +01:00
$num_item = $documento_originale [ 'num_item' ];
$codice_cig = $documento_originale [ 'codice_cig' ];
2021-02-22 14:48:50 +01:00
$codice_commessa = $documento_originale [ 'codice_commessa' ];
2020-03-09 13:57:13 +01:00
$codice_cup = $documento_originale [ 'codice_cup' ];
$id_documento_fe = $documento_originale [ 'id_documento_fe' ];
}
$descrizione_conto = $dbo -> fetchOne ( 'SELECT descrizione FROM co_pianodeiconti3 WHERE id = ' . prepare ( $riga -> id_conto ))[ 'descrizione' ];
2021-02-22 14:48:50 +01:00
$extra_riga = replace ( '_DESCRIZIONE_CONTO__ID_DOCUMENTO__NUMERO_RIGA__CODICE_COMMESSA__CODICE_CIG__CODICE_CUP__RITENUTA_ACCONTO__RITENUTA_CONTRIBUTI__RIVALSA_' , [
2022-01-15 18:21:48 +01:00
'_RIVALSA_' => $riga -> rivalsa_inps ? '<br>' . tr ( 'Cassa previdenziale' ) . ': ' . moneyFormat ( abs ( $riga -> rivalsa_inps )) : null ,
2020-03-09 13:57:13 +01:00
'_RITENUTA_ACCONTO_' => $riga -> ritenuta_acconto ? '<br>Ritenuta acconto: ' . moneyFormat ( abs ( $riga -> ritenuta_acconto )) : null ,
2022-01-15 18:21:48 +01:00
'_RITENUTA_CONTRIBUTI_' => $riga -> ritenuta_contributi ? '<br>Ritenuta previdenziale: ' . moneyFormat ( abs ( $riga -> ritenuta_contributi )) : null ,
2024-05-16 18:02:50 +02:00
'_DESCRIZIONE_CONTO_' => $descrizione_conto ? : ' < span class = " badge badge-danger " >< i class = " fa fa-exclamation-triangle " ></ i >
2020-11-06 10:46:42 +01:00
'.tr(' Conto mancante ').' </ span > ' ,
2020-03-09 13:57:13 +01:00
'_ID_DOCUMENTO_' => $id_documento_fe ? ' - DOC: ' . $id_documento_fe : null ,
'_NUMERO_RIGA_' => $num_item ? ', NRI: ' . $num_item : null ,
2021-02-22 14:48:50 +01:00
'_CODICE_COMMESSA_' => $codice_commessa ? ', COM: ' . $codice_commessa : null ,
2020-03-09 13:57:13 +01:00
'_CODICE_CIG_' => $codice_cig ? ', CIG: ' . $codice_cig : null ,
'_CODICE_CUP_' => $codice_cup ? ', CUP: ' . $codice_cup : null ,
2019-01-25 11:02:36 +01:00
]);
}
2019-01-10 18:41:25 +01:00
2018-12-23 16:16:59 +01:00
echo '
2024-05-23 11:36:25 +02:00
< tr data - id = " '. $riga->id .' " data - type = " '. $riga ::class.' " '.$extra.' >
2022-04-01 09:58:53 +02:00
< td class = " text-center " > ' ;
2023-08-04 14:54:28 +02:00
if ( ! $block_edit ) {
echo '
2022-04-01 09:58:53 +02:00
< input class = " check " type = " checkbox " /> ' ;
2023-08-04 14:54:28 +02:00
}
echo '
2022-04-01 09:58:53 +02:00
</ td >
2020-07-31 11:56:48 +02:00
< td class = " text-center " >
2020-09-11 09:04:06 +02:00
'.$num.'
2020-07-31 11:56:48 +02:00
</ td >
2020-05-29 15:58:47 +02:00
2020-07-31 11:56:48 +02:00
< td > ' ;
2020-03-09 13:57:13 +01:00
2020-09-14 18:38:58 +02:00
// Informazioni aggiuntive sulla destra
echo '
< small class = " pull-right text-right text-muted " >
' . $extra_riga ;
// Aggiunta dei riferimenti ai documenti
2020-09-22 20:28:37 +02:00
if ( $riga -> hasOriginalComponent ()) {
2020-09-14 18:38:58 +02:00
echo '
2020-09-22 20:28:37 +02:00
< br > '.reference($riga->getOriginalComponent()->getDocument(), tr(' Origine ' ));
2020-09-14 18:38:58 +02:00
}
2020-11-20 15:50:15 +01:00
// Fix per righe da altre componenti degli Interventi
elseif ( ! empty ( $riga -> idintervento )) {
echo '
< br > '.reference(Intervento::find($riga->idintervento), tr(' Origine ' ));
}
2020-09-14 18:38:58 +02:00
echo '
</ small > ' ;
2020-03-09 13:57:13 +01:00
if ( $riga -> isArticolo ()) {
2020-07-31 11:56:48 +02:00
echo Modules :: link ( 'Articoli' , $riga -> idarticolo , $riga -> codice . ' - ' . $riga -> descrizione );
2020-03-09 13:57:13 +01:00
} else {
echo nl2br ( $riga -> descrizione );
}
2021-07-07 07:57:10 +02:00
if ( $riga -> isArticolo () && ! empty ( $riga -> articolo -> deleted_at )) {
2021-05-25 14:17:03 +02:00
echo '
< br >< b >< small class = " text-danger " > '.tr(' Articolo eliminato ', []).' </ small ></ b > ' ;
}
2021-07-07 07:57:10 +02:00
if ( $riga -> isArticolo () && empty ( $riga -> articolo -> codice )) {
2021-05-25 14:17:03 +02:00
echo '
< br >< b >< small class = " text-danger " > '.tr(' _DATO_ articolo mancante ' , [
'_DATO_' => 'Codice' ,
]) . '</small></b>' ;
}
2020-03-09 13:57:13 +01:00
if ( $riga -> isArticolo () && ! empty ( $riga -> abilita_serial )) {
2018-12-23 16:16:59 +01:00
if ( ! empty ( $mancanti )) {
echo '
2020-07-31 11:56:48 +02:00
< br >< b >< small class = " text-danger " > '.tr(' _NUM_ serial mancanti ' , [
2024-03-22 15:52:24 +01:00
'_NUM_' => $mancanti ,
]) . '</small></b>' ;
2018-12-23 16:16:59 +01:00
}
if ( ! empty ( $serials )) {
echo '
2020-07-31 11:56:48 +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
2022-11-23 13:05:27 +01:00
if ( $riga -> isArticolo () && ! empty ( $riga -> articolo -> barcode )) {
echo '
< br >< small >< i class = " fa fa-barcode " ></ i > '.$riga->articolo->barcode.' </ small > ' ;
}
2023-08-04 14:54:28 +02:00
2022-07-20 17:41:14 +02:00
if ( ! empty ( $riga -> note )) {
2023-10-27 10:35:05 +02:00
if ( strlen ( $riga -> note ) > 50 ) {
2024-05-23 11:36:25 +02:00
$prima_parte = substr ( $riga -> note , 0 , ( strpos ( $riga -> note , ' ' , 50 ) < 60 ) && ( ! str_starts_with ( $riga -> note , ' ' )) ? strpos ( $riga -> note , ' ' , 50 ) : 50 );
$seconda_parte = substr ( $riga -> note , ( strpos ( $riga -> note , ' ' , 50 ) < 60 ) && ( ! str_starts_with ( $riga -> note , ' ' )) ? strpos ( $riga -> note , ' ' , 50 ) : 50 );
2024-05-16 18:02:50 +02:00
$stringa_modificata = '<span class="right badge badge-default">' . $prima_parte . ' </ small >
< span id = " read-more-target-'. $riga->id .' " class = " read-more-target " >< span class = " right badge badge-default " > '.$seconda_parte.' </ small ></ span >< a href = " #read-more-target-'. $riga->id .' " class = " read-more-trigger " >...</ a > ' ;
2023-10-06 17:06:44 +02:00
} else {
2024-05-16 18:02:50 +02:00
$stringa_modificata = '<span class="right badge badge-default">' . $riga -> note . '</small>' ;
2023-10-06 17:06:44 +02:00
}
2023-10-27 10:35:05 +02:00
echo '
2023-10-06 17:06:44 +02:00
< div class = " block-item-text " >
< input type = " checkbox " hidden class = " read-more-state " id = " read-more " >
< div class = " read-more-wrap " >
'.nl2br($stringa_modificata).'
</ div >
</ div >
' ;
2022-07-20 17:41:14 +02:00
}
2018-12-23 16:16:59 +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
if ( $riga -> isDescrizione ()) {
2018-02-15 16:44:16 +01:00
echo '
2023-09-29 15:34:02 +02:00
< td ></ td > ' ;
if ( $dir == 'entrata' ) {
echo '<td></td>' ;
}
2023-10-05 10:26:57 +02:00
echo '
2020-02-28 11:38:24 +01:00
< td ></ td >
< td ></ td >
< td ></ td >
< td ></ td > ' ;
} else {
// Quantità e unità di misura
2018-01-18 19:03:06 +01:00
echo '
2023-09-29 15:34:02 +02:00
< td >
2023-10-06 12:45:32 +02:00
{[ " type " : " number " , " name " : " qta_'. $riga->id .' " , " value " : " '. $riga->qta .' " , " min-value " : " 0 " , " onchange " : " aggiornaInline( $ (this).closest( \ 'tr \ ').data( \ 'id \ ')) " , " disabled " : " '.( $riga->isSconto () ? 1 : 0).' " , " disabled " : " '.( $block_edit || $riga->isSconto ()).' " ]}
2020-07-31 11:56:48 +02:00
</ td > ' ;
2017-08-04 16:28:16 +02:00
2023-12-29 16:15:38 +01:00
if ( $riga -> isArticolo ()) {
$id_anagrafica = $fattura -> idanagrafica ;
$show_notifica = getPrezzoConsigliato ( $id_anagrafica , $dir , $riga -> idarticolo , $riga );
}
2023-10-27 10:35:05 +02:00
// Costi unitari
if ( $dir == 'entrata' ) {
if ( $riga -> isSconto ()) {
echo '
2023-10-06 12:45:32 +02:00
< td ></ td > ' ;
2023-10-27 10:35:05 +02:00
} else {
2023-10-06 12:45:32 +02:00
echo '
2023-09-29 15:34:02 +02:00
< td >
{[ " type " : " number " , " name " : " costo_'. $riga->id .' " , " value " : " '. $riga->costo_unitario .' " , " onchange " : " aggiornaInline( $ (this).closest( \ 'tr \ ').data( \ 'id \ ')) " , " icon-after " : " '.currency().' " , " disabled " : " '. $block_edit .' " ]}
</ td > ' ;
2023-10-27 10:35:05 +02:00
}
2018-12-24 10:46:59 +01:00
}
2018-02-15 16:44:16 +01:00
2023-10-27 10:35:05 +02:00
// Prezzi unitari
if ( $riga -> isSconto ()) {
echo '
2023-10-06 12:45:32 +02:00
< td ></ td > ' ;
2023-10-27 10:35:05 +02:00
} else {
echo '
2023-09-29 15:34:02 +02:00
< td >
2023-12-29 16:15:38 +01:00
'.($show_notifica[' show_notifica_prezzo '] ? ' < i class = " fa fa-info-circle notifica-prezzi " ></ i > ' : ' ').'
2023-09-29 15:34:02 +02:00
{[ " type " : " number " , " name " : " prezzo_'. $riga->id .' " , " value " : " '. $riga->prezzo_unitario_corrente .' " , " onchange " : " aggiornaInline( $ (this).closest( \ 'tr \ ').data( \ 'id \ ')) " , " icon-before " : " '.(abs( $riga->provvigione_unitaria ) > 0 ? '<span class= \ 'tip text-info \ ' title= \ ''.provvigioneInfo( $riga ).' \ '><small><i class= \ 'fa fa-handshake-o \ '></i></small></span>' : '').' " , " icon-after " : " '.currency().' " , " disabled " : " '. $block_edit .' " ]}
</ td > ' ;
2023-10-27 10:35:05 +02:00
}
2019-07-11 17:44:42 +02:00
2023-09-29 15:34:02 +02:00
// Sconto unitario
$tipo_sconto = '' ;
if ( $riga [ 'sconto' ] == 0 ) {
$tipo_sconto = ( setting ( 'Tipo di sconto predefinito' ) == '%' ? 'PRC' : 'UNT' );
2017-08-04 16:28:16 +02:00
}
2020-02-28 11:38:24 +01:00
echo '
2023-09-29 15:34:02 +02:00
< td >
2023-12-29 16:15:38 +01:00
'.($show_notifica[' show_notifica_sconto '] ? ' < i class = " fa fa-info-circle notifica-prezzi " ></ i > ' : ' ').'
2023-10-06 12:45:32 +02:00
{[ " type " : " number " , " name " : " sconto_'. $riga->id .' " , " value " : " '.( $riga->sconto_percentuale ?: $riga->sconto_unitario_corrente ).' " , " onchange " : " aggiornaInline( $ (this).closest( \ 'tr \ ').data( \ 'id \ ')) " , " icon-after " : " '.( $riga->isSconto () ? currency() : 'choice|untprc|'.( $tipo_sconto ?: $riga->tipo_sconto )).' " , " disabled " : " '. $block_edit .' " ]}
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-01-18 19:03:06 +01: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).'
2024-04-18 17:44:05 +02:00
< br >< small class = " '.(( $riga->aliquota ->deleted_at) ? 'text-red' : '').' text-muted " > '.$riga->aliquota->getTranslation(' title ').' ( '.$riga->aliquota->esigibilita.' ) '.(($riga->aliquota->esente) ? ' ( '.$riga->aliquota->codice_natura_fe.' ) ' : null).' </ small >
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
// Importo
2018-12-23 14:25:20 +01:00
echo '
2020-07-31 11:56:48 +02:00
< td class = " text-right " >
2023-09-29 15:34:02 +02:00
'.moneyFormat($riga->importo).'
</ td > ' ;
2020-02-28 11:38:24 +01:00
}
2018-12-23 14:25:20 +01:00
2018-12-23 16:16:59 +01:00
// Possibilità di rimuovere una riga solo se la fattura non è pagata
echo '
2024-03-11 13:36:41 +01:00
< td class = " text-center " >
2023-03-08 14:22:46 +01:00
2024-03-11 13:36:41 +01:00
< div class = " input-group-btn " > ' ;
2024-03-15 12:33:20 +01:00
if ( hasArticoliFiglio ( $riga -> idarticolo )) {
echo '
< a class = " btn btn-xs btn-info " title = " '.tr('Distinta base').' " onclick = " viewDistinta('. $riga->idarticolo .') " >
< i class = " fa fa-eye " ></ i >
</ a > ' ;
}
2024-03-11 13:36:41 +01:00
if ( $riga -> isArticolo () && ! empty ( $riga -> abilita_serial )) {
2023-03-08 14:22:46 +01:00
echo '
2020-07-31 11:56:48 +02:00
< a class = " btn btn-primary btn-xs " title = " '.tr('Modifica seriali della riga').' " onclick = " modificaSeriali(this) " >
< i class = " fa fa-barcode " ></ i >
</ a > ' ;
2023-03-08 14:22:46 +01:00
}
2018-02-19 17:57:27 +01:00
2023-03-08 14:22:46 +01:00
if ( $record [ 'stato' ] != 'Pagato' && $record [ 'stato' ] != 'Emessa' ) {
2022-12-16 15:53:39 +01:00
if ( $riga -> id != $fattura -> rigaBollo -> id ) {
2023-08-04 14:54:28 +02:00
echo '
2020-07-31 11:56:48 +02:00
< a class = " btn btn-xs btn-info " title = " '.tr('Aggiungi informazioni FE per questa riga').' " onclick = " apriInformazioniFE(this) " >
< i class = " fa fa-file-code-o " ></ i >
</ a >
< a class = " btn btn-xs btn-warning " title = " '.tr('Modifica riga').' " onclick = " modificaRiga(this) " >
< i class = " fa fa-edit " ></ i >
</ a >
2022-04-01 09:58:53 +02:00
< a class = " btn btn-xs btn-danger " title = " '.tr('Rimuovi riga').' " onclick = " rimuoviRiga([ $ (this).closest( \ 'tr \ ').data( \ 'id \ ')]) " >
2020-07-31 11:56:48 +02:00
< i class = " fa fa-trash " ></ i >
2022-12-16 15:53:39 +01:00
</ a > ' ;
}
2020-07-31 11:56:48 +02:00
2022-12-16 15:53:39 +01:00
echo '
2023-05-24 17:15:29 +02:00
< a class = " btn btn-xs btn-default handle '.( $order_row_desc ? 'disabled' : '').' " title = " '.tr('Modifica ordine delle righe').' " >
2020-07-31 11:56:48 +02:00
< i class = " fa fa-sort " ></ i >
2024-03-11 13:36:41 +01:00
</ a > ' ;
2018-12-23 16:16:59 +01:00
}
echo '
2024-03-11 13:36:41 +01:00
</ div >
2020-07-31 11:56:48 +02:00
</ td >
</ tr > ' ;
2018-12-23 16:16:59 +01:00
}
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
2020-03-09 13:57:13 +01:00
// Individuazione dei totali
$imponibile = $fattura -> imponibile ;
2022-10-11 12:51:14 +02:00
$sconto = - $fattura -> sconto ;
2020-03-09 13:57:13 +01:00
$totale_imponibile = $fattura -> totale_imponibile ;
$iva = $fattura -> iva ;
$totale = $fattura -> totale ;
2021-02-26 18:45:52 +01:00
$sconto_finale = $fattura -> getScontoFinale ();
2022-02-21 10:56:51 +01:00
$netto_a_pagare = $fattura -> netto ;
2020-08-07 12:12:06 +02:00
$rivalsa_inps = $fattura -> rivalsa_inps ;
$ritenuta_acconto = $fattura -> ritenuta_acconto ;
$ritenuta_contributi = $fattura -> totale_ritenuta_contributi ;
2020-03-09 13:57:13 +01:00
2017-08-04 16:28:16 +02:00
// IMPONIBILE
echo '
2020-07-31 11:56:48 +02:00
< tr >
2023-09-29 15:34:02 +02:00
< td colspan = " '. $colspan .' " class = " text-right " >
2020-07-31 11:56:48 +02:00
< b > '.tr(' Imponibile ', [], [' upper ' => true]).' :</ b >
</ td >
< td class = " text-right " >
'.moneyFormat($imponibile, 2).'
</ td >
< td ></ td >
</ tr > ' ;
2017-08-04 16:28:16 +02:00
// SCONTO
2018-12-23 16:16:59 +01:00
if ( ! empty ( $sconto )) {
2017-08-04 16:28:16 +02:00
echo '
2020-07-31 11:56:48 +02:00
< tr >
2023-09-29 15:34:02 +02:00
< td colspan = " '. $colspan .' " class = " text-right " >
2023-04-18 10:48:50 +02:00
< b >< span class = " tip " title = " '.tr('Un importo negativo indica uno sconto, mentre uno positivo indica una maggiorazione').' " >< i class = " fa fa-question-circle-o " ></ i > '.tr(' Sconto / maggiorazione ', [], [' upper ' => true]).' :</ span ></ b >
2020-07-31 11:56:48 +02:00
</ td >
< td class = " text-right " >
'.moneyFormat($sconto, 2).'
</ td >
< td ></ td >
</ tr > ' ;
2017-08-04 16:28:16 +02:00
2019-07-11 17:44:42 +02:00
// TOTALE IMPONIBILE
2017-08-04 16:28:16 +02:00
echo '
2020-07-31 11:56:48 +02:00
< tr >
2023-09-29 15:34:02 +02:00
< td colspan = " '. $colspan .' " class = " text-right " >
2020-07-31 11:56:48 +02:00
< 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
}
// RIVALSA INPS
2020-08-07 12:12:06 +02:00
if ( ! empty ( $rivalsa_inps )) {
2017-08-04 16:28:16 +02:00
echo '
2020-07-31 11:56:48 +02:00
< tr >
2023-09-29 15:34:02 +02:00
< td colspan = " '. $colspan .' " class = " text-right " > ' ;
2019-02-12 17:21:27 +01:00
if ( $dir == 'entrata' ) {
2020-08-07 12:12:06 +02:00
$descrizione_rivalsa = $database -> fetchOne ( 'SELECT CONCAT_WS(\' - \', codice, descrizione) AS descrizione FROM fe_tipo_cassa WHERE codice = ' . prepare ( setting ( 'Tipo Cassa Previdenziale' )));
2019-02-12 17:21:27 +01:00
echo '
2020-08-07 12:12:06 +02:00
< span class = " tip " title = " '. $descrizione_rivalsa['descrizione'] .' " >
< i class = " fa fa-question-circle-o " ></ i >
</ span > ' ;
2019-02-12 17:21:27 +01:00
}
echo '
2022-01-15 18:21:48 +01:00
< b > '.tr(' Cassa previdenziale ', [], [' upper ' => true]).' :</ b >
2020-07-31 11:56:48 +02:00
</ td >
< td class = " text-right " >
2020-08-07 12:12:06 +02:00
'.moneyFormat($rivalsa_inps, 2).'
2020-07-31 11:56:48 +02:00
</ td >
< td ></ td >
2023-02-08 15:12:58 +01:00
</ tr >
< tr >
2023-09-29 15:34:02 +02:00
< td colspan = " '. $colspan .' " class = " text-right " >
2023-02-08 15:12:58 +01:00
< b > '.tr(' Totale imponibile ', [], [' upper ' => true]).' :</ b >
</ td >
< td class = " text-right " >
'.moneyFormat($totale_imponibile + $rivalsa_inps, 2).'
</ td >
< td ></ td >
2020-07-31 11:56:48 +02:00
</ tr > ' ;
2017-08-04 16:28:16 +02:00
}
// IVA
2018-12-23 16:16:59 +01:00
if ( ! empty ( $iva )) {
2017-08-04 16:28:16 +02:00
echo '
2020-07-31 11:56:48 +02:00
< tr >
2023-09-29 15:34:02 +02:00
< td colspan = " '. $colspan .' " class = " text-right " > ' ;
2018-12-29 12:03:22 +01:00
if ( $records [ 0 ][ 'split_payment' ]) {
echo '<b>' . tr ( 'Iva a carico del destinatario' , [], [ 'upper' => true ]) . ':</b>' ;
} else {
echo '<b>' . tr ( 'Iva' , [], [ 'upper' => true ]) . ':</b>' ;
}
echo '
2020-07-31 11:56:48 +02:00
</ td >
< td class = " text-right " >
'.moneyFormat($iva, 2).'
</ td >
< td ></ td >
</ tr > ' ;
2017-08-04 16:28:16 +02:00
}
// TOTALE
echo '
2020-07-31 11:56:48 +02:00
< tr >
2023-09-29 15:34:02 +02:00
< td colspan = " '. $colspan .' " class = " text-right " >
2023-04-27 17:15:24 +02:00
< b > '.tr(' Totale documento ', [], [' upper ' => true]).' :</ b >
2020-07-31 11:56:48 +02:00
</ td >
< td class = " text-right " >
'.moneyFormat($totale, 2).'
</ td >
< td ></ td >
</ tr > ' ;
2017-08-04 16:28:16 +02:00
// RITENUTA D'ACCONTO
2020-08-07 12:12:06 +02:00
if ( ! empty ( $ritenuta_acconto )) {
2017-08-04 16:28:16 +02:00
echo '
2020-07-31 11:56:48 +02:00
< tr >
2023-09-29 15:34:02 +02:00
< td colspan = " '. $colspan .' " class = " text-right " >
2020-07-31 11:56:48 +02:00
< b > '.tr("Ritenuta d' acconto " , [], ['upper' => true]).':</b>
</ td >
< td class = " text-right " >
2020-08-07 12:12:06 +02:00
'.moneyFormat($ritenuta_acconto, 2).'
2020-07-31 11:56:48 +02:00
</ td >
< td ></ td >
</ tr > ' ;
2017-08-04 16:28:16 +02:00
}
2022-01-15 18:21:48 +01:00
// RITENUTA PREVIDENZIALE
2020-08-07 12:12:06 +02:00
if ( ! empty ( $ritenuta_contributi )) {
2019-02-15 12:12:44 +01:00
echo '
2020-07-31 11:56:48 +02:00
< tr >
2023-09-29 15:34:02 +02:00
< td colspan = " '. $colspan .' " class = " text-right " >
2022-01-15 18:21:48 +01:00
< b > '.tr(' Ritenuta previdenziale ', [], [' upper ' => true]).' :</ b >
2020-07-31 11:56:48 +02:00
</ td >
< td class = " text-right " >
2020-08-07 12:12:06 +02:00
'.moneyFormat($ritenuta_contributi, 2).'
2020-07-31 11:56:48 +02:00
</ td >
< td ></ td >
</ tr > ' ;
2019-02-15 12:12:44 +01:00
}
2022-01-15 17:30:49 +01:00
// SCONTO IN FATTURA
2021-02-26 18:45:52 +01:00
if ( ! empty ( $sconto_finale )) {
echo '
< tr >
2023-09-29 15:34:02 +02:00
< td colspan = " '. $colspan .' " class = " text-right " >
2022-01-15 17:30:49 +01:00
< b > '.tr(' Sconto in fattura ', [], [' upper ' => true]).' :</ b >
2021-02-26 18:45:52 +01:00
</ td >
< td class = " text-right " >
'.moneyFormat($sconto_finale, 2).'
</ td >
< td ></ td >
</ tr > ' ;
}
2017-08-04 16:28:16 +02:00
// NETTO A PAGARE
if ( $totale != $netto_a_pagare ) {
echo '
2020-07-31 11:56:48 +02:00
< tr >
2023-09-29 15:34:02 +02:00
< td colspan = " '. $colspan .' " class = " text-right " >
2020-07-31 11:56:48 +02:00
< 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
}
2022-05-19 17:42:41 +02:00
// Provvigione
2023-08-04 14:54:28 +02:00
if ( ! empty ( $fattura -> provvigione )) {
2022-05-19 17:42:41 +02:00
echo '
< tr >
2023-09-29 15:34:02 +02:00
< td colspan = " '. $colspan .' " class = " text-right " >
2022-05-19 17:42:41 +02:00
'.tr(' Provvigioni ').' :
</ td >
< td class = " text-right " >
'.moneyFormat($fattura->provvigione).'
</ td >
< td ></ td >
</ tr > ' ;
2023-01-18 16:07:48 +01:00
echo '
< tr >
2023-09-29 15:34:02 +02:00
< td colspan = " '. $colspan .' " class = " text-right " >
2023-01-18 16:07:48 +01:00
'.tr(' Netto da provvigioni ').' :
</ td >
< td class = " text-right " >
'.moneyFormat($fattura->totale_imponibile - $fattura->provvigione).'
</ td >
< td ></ td >
2023-08-04 14:54:28 +02:00
</ tr > ' ;
2022-05-19 17:42:41 +02:00
}
2017-08-04 16:28:16 +02:00
echo '
2022-04-01 09:58:53 +02:00
</ table > ' ;
if ( ! $block_edit && sizeof ( $righe ) > 0 ) {
echo '
< div class = " btn-group " >
2022-11-28 14:54:32 +01:00
< button type = " button " class = " btn btn-xs btn-default disabled " id = " duplica_righe " onclick = " duplicaRiga(getSelectData()); " >
2022-04-01 09:58:53 +02:00
< i class = " fa fa-copy " ></ i >
</ button >
2022-11-28 14:54:32 +01:00
< button type = " button " class = " btn btn-xs btn-default disabled " id = " elimina_righe " onclick = " rimuoviRiga(getSelectData()); " >
2022-04-01 09:58:53 +02:00
< i class = " fa fa-trash " ></ i >
2023-05-04 09:57:01 +02:00
</ button > ' ;
2023-09-29 15:34:02 +02:00
if ( $dir == 'entrata' ) {
2023-08-04 14:54:28 +02:00
echo '
2023-09-25 16:53:28 +02:00
< button type = " button " class = " btn btn-xs btn-default disabled " id = " confronta_righe " onclick = " confrontaRighe(getSelectData()); " >
'.tr(' Confronta prezzi ').'
</ button > ' ;
2023-08-04 14:54:28 +02:00
}
echo '
2023-09-25 16:53:28 +02:00
< button type = " button " class = " btn btn-xs btn-default disabled " id = " aggiorna_righe " onclick = " aggiornaRighe(getSelectData()); " >
'.tr(' Aggiorna prezzi ').'
</ button >
2022-04-01 09:58:53 +02:00
</ div > ' ;
}
2017-08-04 16:28:16 +02:00
echo '
2022-04-01 09:58:53 +02:00
</ div >
2017-08-04 16:28:16 +02:00
< 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
2023-04-06 13:11:38 +02:00
content_was_modified = false ;
2021-03-29 18:31:23 +02:00
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
}
2022-04-01 09:58:53 +02:00
// Estraggo le righe spuntate
function getSelectData () {
let data = new Array ();
$ ( \ ' #righe\').find(\'.check:checked\').each(function (){
data . push ( $ ( this ) . closest ( \ ' tr\ ' ) . data ( \ ' id\ ' ));
});
return data ;
}
2023-04-27 14:35:02 +02:00
function confrontaRighe ( id ) {
2023-07-21 09:58:20 +02:00
openModal ( " '.tr('Confronta prezzi').' " , " '. $module->fileurl ('modals/confronta_righe.php').'?id_module= " + globals . id_module + " &id_record= " + globals . id_record + " &righe= " + id );
2023-04-27 14:35:02 +02:00
}
2023-09-25 16:53:28 +02:00
function aggiornaRighe ( id ) {
swal ({
title : " '.tr('Aggiornare prezzi di queste righe?').' " ,
html : " '.tr('Confermando verranno aggiornati i prezzi delle righe secondo i listini ed i prezzi predefiniti collegati all \ 'articolo e ai piani sconto collegati all \ 'anagrafica.').' " ,
type : " warning " ,
showCancelButton : true ,
confirmButtonText : " '.tr('Sì').' "
}) . then ( function () {
$ . ajax ({
url : globals . rootdir + " /actions.php " ,
type : " POST " ,
data : {
id_module : globals . id_module ,
id_record : globals . id_record ,
op : " update-price " ,
righe : id ,
},
success : function ( response ) {
renderMessages ();
caricaRighe ( null );
},
error : function () {
renderMessages ();
caricaRighe ( null );
}
});
}) . catch ( swal . noop );
}
2022-04-01 09:58:53 +02:00
function rimuoviRiga ( id ) {
2020-07-06 13:19:20 +02:00
swal ({
2022-04-01 09:58:53 +02:00
title : " '.tr('Rimuovere queste righe?').' " ,
html : " '.tr('Sei sicuro di volere rimuovere queste righe dal documento?').' '.tr( " L 'operazione è irreversibile").' . " ,
2020-07-06 13:19:20 +02:00
type : " warning " ,
showCancelButton : true ,
confirmButtonText : " '.tr('Sì').' "
}) . then ( function () {
$ . ajax ({
url : globals . rootdir + " /actions.php " ,
type : " POST " ,
dataType : " json " ,
data : {
id_module : globals . id_module ,
id_record : globals . id_record ,
op : " delete_riga " ,
2022-04-01 09:58:53 +02:00
righe : id ,
},
success : function ( response ) {
2023-09-25 16:53:28 +02:00
renderMessages ();
caricaRighe ( null );
2022-04-01 09:58:53 +02:00
},
error : function () {
2023-09-25 16:53:28 +02:00
renderMessages ();
caricaRighe ( null );
2022-04-01 09:58:53 +02:00
}
});
}) . catch ( swal . noop );
}
function duplicaRiga ( id ) {
swal ({
title : " '.tr('Duplicare queste righe?').' " ,
html : " '.tr('Sei sicuro di volere queste righe del documento?').' " ,
type : " warning " ,
showCancelButton : true ,
confirmButtonText : " '.tr('Sì').' "
}) . then ( function () {
$ . ajax ({
url : globals . rootdir + " /actions.php " ,
type : " POST " ,
dataType : " json " ,
data : {
id_module : globals . id_module ,
id_record : globals . id_record ,
op : " copy_riga " ,
righe : id ,
2020-07-06 13:19:20 +02:00
},
success : function ( response ) {
2023-09-25 16:53:28 +02:00
renderMessages ();
caricaRighe ( null );
2020-07-06 13:19:20 +02:00
},
error : function () {
2023-09-25 16:53:28 +02:00
renderMessages ();
caricaRighe ( null );
2020-07-06 13:19:20 +02:00
}
});
}) . catch ( swal . noop );
}
function modificaSeriali ( 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
openModal ( " '.tr('Aggiorna SN').' " , globals . rootdir + " /modules/fatture/add_serial.php?id_module= " + globals . id_module + " &id_record= " + globals . id_record + " &riga_id= " + id + " &riga_type= " + type );
}
function apriInformazioniFE ( 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
openModal ( " '.tr('Dati Fattura Elettronica').' " , " '. $module->fileurl ('fe/row-fe.php').'?id_module= " + globals . id_module + " &id_record= " + globals . id_record + " &riga_id= " + id + " &riga_type= " + type )
}
2020-07-31 14:25:50 +02:00
$ ( document ) . ready ( function () {
2021-07-20 20:48:02 +02:00
sortable ( " .sortable " , {
axis : " y " ,
handle : " .handle " ,
cursor : " move " ,
dropOnEmpty : true ,
scroll : true ,
})[ 0 ] . addEventListener ( " sortupdate " , function ( e ) {
let order = $ ( " .table tr[data-id] " ) . toArray () . map ( a => $ ( a ) . data ( " id " ))
$ . post ( globals . rootdir + " /actions.php " , {
id_module : globals . id_module ,
id_record : globals . id_record ,
op : " update_position " ,
order : order . join ( " , " ),
});
});
2017-08-04 16:28:16 +02:00
});
2022-04-01 09:58:53 +02:00
$ ( " .check " ) . on ( " change " , function () {
let checked = 0 ;
$ ( " .check " ) . each ( function () {
if ( $ ( this ) . is ( " :checked " )) {
checked = 1 ;
}
});
if ( checked ) {
$ ( " #elimina_righe " ) . removeClass ( " disabled " );
$ ( " #duplica_righe " ) . removeClass ( " disabled " );
2023-04-27 14:35:02 +02:00
$ ( " #confronta_righe " ) . removeClass ( " disabled " );
2023-09-25 16:53:28 +02:00
$ ( " #aggiorna_righe " ) . removeClass ( " disabled " );
2023-09-28 16:08:45 +02:00
$ ( " #elimina " ) . addClass ( " disabled " );
2022-04-01 09:58:53 +02:00
} else {
$ ( " #elimina_righe " ) . addClass ( " disabled " );
$ ( " #duplica_righe " ) . addClass ( " disabled " );
2023-04-27 14:35:02 +02:00
$ ( " #confronta_righe " ) . addClass ( " disabled " );
2023-09-28 16:08:45 +02:00
$ ( " #aggiorna_righe " ) . addClass ( " disabled " );
$ ( " #elimina " ) . removeClass ( " disabled " );
2022-04-01 09:58:53 +02:00
}
});
$ ( " #check_all " ) . click ( function (){
if ( $ ( this ) . is ( " :checked " ) ){
$ ( " .check " ) . each ( function (){
if ( ! $ ( this ) . is ( " :checked " ) ){
$ ( this ) . trigger ( " click " );
}
});
} else {
$ ( " .check " ) . each ( function (){
if ( $ ( this ) . is ( " :checked " ) ){
$ ( this ) . trigger ( " click " );
}
});
}
});
2023-09-29 15:34:02 +02:00
$ ( " .tipo_icon_after " ) . on ( " change " , function () {
aggiornaInline ( $ ( this ) . closest ( " tr " ) . data ( " id " ));
});
function aggiornaInline ( id ) {
content_was_modified = false ;
var qta = input ( " qta_ " + id ) . get ();
var sconto = input ( " sconto_ " + id ) . get ();
var tipo_sconto = input ( " tipo_sconto_ " + id ) . get ();
var prezzo = input ( " prezzo_ " + id ) . get ();
var costo = input ( " costo_ " + id ) . get ();
$ . ajax ({
url : globals . rootdir + " /actions.php " ,
type : " POST " ,
data : {
id_module : globals . id_module ,
id_record : globals . id_record ,
op : " update_inline " ,
riga_id : id ,
qta : qta ,
sconto : sconto ,
tipo_sconto : tipo_sconto ,
prezzo : prezzo ,
costo : costo
},
success : function ( response ) {
caricaRighe ( id );
renderMessages ();
},
error : function () {
caricaRighe ( null );
}
});
}
2024-03-15 12:33:20 +01:00
init (); ' ;
2024-06-11 16:58:27 +02:00
if ( Plugin :: where ( 'name' , 'Distinta base' ) -> first ()) {
2024-03-15 12:33:20 +01:00
echo '
async function viewDistinta ( id_articolo ) {
2024-06-11 16:58:27 +02:00
openModal ( " '.tr('Distinta base').' " , " '.Plugin::where('name', 'Distinta base')->first()->fileurl('view.php').'?id_module= " + globals . id_module + " &id_record= " + globals . id_record + " &id_articolo= " + id_articolo );
2024-03-15 12:33:20 +01:00
} ' ;
}
echo '
2024-03-22 15:52:24 +01:00
</ script > ' ;