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
2021-07-07 07:57:10 +02:00
use Carbon\Carbon ;
2024-03-22 15:52:24 +01:00
use Models\Module ;
use Models\Plugin ;
2020-09-09 16:55:45 +02:00
use Modules\Anagrafiche\Anagrafica ;
2022-07-15 17:21:25 +02:00
use Modules\Fatture\Fattura ;
2020-12-02 11:31:52 +01:00
use Modules\Fatture\Gestori\Bollo ;
2021-05-03 13:20:27 +02:00
use Modules\Interventi\Intervento ;
2021-07-07 07:57:10 +02:00
use Modules\Iva\Aliquota ;
2021-09-24 12:26:34 +02:00
use Plugins\ExportFE\Interaction ;
2019-09-13 11:29:45 +02:00
2017-08-04 16:28:16 +02:00
include_once __DIR__ . '/../../core.php' ;
2020-09-09 16:55:45 +02:00
$anagrafica_azienda = Anagrafica :: find ( setting ( 'Azienda predefinita' ));
2020-09-08 11:38:25 +02:00
$block_edit = ! empty ( $note_accredito ) || in_array ( $record [ 'stato' ], [ 'Emessa' , 'Pagato' , 'Parzialmente pagato' ]) || ! $abilita_genera ;
2017-08-04 16:28:16 +02:00
2018-05-24 18:29:37 +02:00
if ( $dir == 'entrata' ) {
2018-06-26 10:25:50 +02:00
$conto = 'vendite' ;
2018-05-24 18:29:37 +02:00
} else {
2018-06-26 10:25:50 +02:00
$conto = 'acquisti' ;
2018-05-24 18:29:37 +02:00
}
2024-02-24 01:08:41 +01:00
// Informazioni sulla dichiarazione d'intento, visibili solo finché la fattura è in bozza
2023-08-04 14:54:28 +02:00
if ( $dir == 'entrata' && ! empty ( $fattura -> dichiarazione )) {
2019-09-13 11:29:45 +02:00
$diff = $fattura -> dichiarazione -> massimale - $fattura -> dichiarazione -> totale ;
2022-03-03 17:55:41 +01:00
$diff_in_days = Carbon :: parse ( $fattura -> dichiarazione -> data_fine ) -> diffAsCarbonInterval ( $fattura -> data );
2019-09-13 11:29:45 +02:00
$id_iva = setting ( " Iva per lettere d'intento " );
$iva = Aliquota :: find ( $id_iva );
2021-02-23 11:40:27 +01:00
if ( ! empty ( $iva )) {
2022-03-03 17:55:41 +01:00
if ( $diff == 0 ) {
2021-02-23 11:40:27 +01:00
echo '
2024-02-27 14:54:33 +01:00
< div class = " alert alert-info " >
< i class = " fa fa-info " ></ i > '.tr("La dichiarazione d' intento _PROTOCOLLO_ ha raggiunto il massimale previsto di _MONEY_ . " , [
2024-03-22 15:52:24 +01:00
'_MONEY_' => moneyFormat ( abs ( $fattura -> dichiarazione -> massimale )),
'_PROTOCOLLO_' => $fattura -> dichiarazione -> numero_protocollo ,
]) . ' .</ b >
2024-02-27 14:54:33 +01:00
</ div > ' ;
2022-03-03 17:55:41 +01:00
} elseif ( $diff < 0 ) {
2021-02-23 11:40:27 +01:00
echo '
2024-02-27 14:54:33 +01:00
< div class = " alert alert-warning " >
< i class = " fa fa-warning " ></ i > '.tr("La dichiarazione d' intento _PROTOCOLLO_ ha superato il massimale previsto di _MONEY_ . " , [
2024-03-22 15:52:24 +01:00
'_MONEY_' => moneyFormat ( abs ( $diff )),
'_PROTOCOLLO_' => $fattura -> dichiarazione -> numero_protocollo ,
]) . ' .</ b >
2024-02-27 14:54:33 +01:00
</ div > ' ;
2023-08-04 14:54:28 +02:00
} elseif ( $diff_in_days < 0 ) {
2022-03-03 17:55:41 +01:00
echo '
2024-02-27 14:54:33 +01:00
< div class = " alert alert-warning " >
< i class = " fa fa-warning " ></ i > '.tr("La dichiarazione d' intento _PROTOCOLLO_ ha come data fine validità _SCADENZA_ mentre la fattura ha data _DATA_ " , [
2024-03-22 15:52:24 +01:00
'_SCADENZA_' => dateFormat ( $fattura -> dichiarazione -> data_fine ),
'_DATA_' => dateFormat ( $fattura -> data ),
'_PROTOCOLLO_' => $fattura -> dichiarazione -> numero_protocollo ,
]) . ' .</ b >
2024-02-27 14:54:33 +01:00
</ div > ' ;
2022-03-03 17:55:41 +01:00
}
2021-02-23 11:40:27 +01:00
} else {
2024-01-15 15:30:45 +01:00
// TODO link ad impostazioni con nuova ricerca rapida
2019-09-13 11:29:45 +02:00
echo '
2024-02-27 14:54:33 +01:00
< div class = " alert alert-warning " >
< i class = " fa fa-warning " ></ i > '.tr("Attenzione nessuna aliq. IVA definita per la dichiarazione d' intento . _SETTING_ " , [
2024-03-22 15:52:24 +01:00
'_SETTING_' => Modules :: link ( 'Impostazioni' , null , tr ( 'Selezionala dalle impostazioni' ), true , null , true , null , " &search=Iva per lettere d'intento " ),
]) . '
2024-02-27 14:54:33 +01:00
</ div > ' ;
2019-09-13 11:29:45 +02:00
}
}
2022-05-13 13:23:15 +02:00
// Autofattura
if ( ! empty ( $fattura_acquisto_originale )) {
echo '
2024-02-27 14:54:33 +01:00
< div class = " alert alert-info " >
< i class = " fa fa-info " ></ i > '.tr("Questa è un' autofattura generata da una fattura di acquisto " ).':
< b > '.Modules::link(' Fatture di acquisto ', $fattura_acquisto_originale->id, tr(' Fattura num . _NUM_ del _DATE_ ' , [
'_NUM_' => $fattura_acquisto_originale -> numero_esterno ,
'_DATE_' => dateFormat ( $fattura_acquisto_originale -> data ),
])) . ' </ b >
</ div > ' ;
2022-05-13 13:23:15 +02:00
}
if ( $abilita_autofattura ) {
echo '
2024-02-27 14:54:33 +01:00
< div class = " alert alert-info " >
< i class = " fa fa-info-circle " ></ i > '.tr("Per questa fattura è prevista la generazione di un' autofattura tramite < b > Crea » Autofattura </ b > " ).'.
</ div > ' ;
2022-05-13 13:23:15 +02:00
} elseif ( $fattura -> id_autofattura != null ) {
echo '
2024-02-27 14:54:33 +01:00
< div class = " alert alert-info " >
< i class = " fa fa-info " ></ i > '.tr("È presente un' autofattura collegata " ).':
< b > '.Modules::link(' Fatture di vendita ', $fattura->id_autofattura, tr(' Fattura num . _NUM_ del _DATE_ ' , [
'_NUM_' => $autofattura_vendita -> numero_esterno ,
'_DATE_' => dateFormat ( $autofattura_vendita -> data ),
])) . ' </ b >
</ div > ' ;
2022-05-13 13:23:15 +02:00
} elseif ( $autofattura_collegata != null ) {
echo '
2024-02-27 14:54:33 +01:00
< div class = " alert alert-info " >
< i class = " fa fa-info " ></ i > '.tr(' Questa autofattura è già stata importata come fattura di acquisto ').' :
< b > '.Modules::link(' Fatture di acquisto ', $autofattura_collegata->id, tr(' Fattura num . _NUM_ del _DATE_ ' , [
'_NUM_' => $autofattura_collegata -> numero_esterno ,
'_DATE_' => dateFormat ( $autofattura_collegata -> data ),
])) . ' </ b >
</ div > ' ;
2022-05-13 13:23:15 +02:00
}
2022-07-15 17:21:25 +02:00
// Note di credito collegate
if ( ! empty ( $note_accredito )) {
echo '
< div class = " alert alert-info text-center " > '.tr(' Note di credito collegate ').' : ' ;
foreach ( $note_accredito as $nota ) {
$text = tr ( 'Rif. fattura _NUM_ del _DATE_' , [
'_NUM_' => $nota [ 'numero' ],
'_DATE_' => Translator :: dateToLocale ( $nota [ 'data' ]),
]);
echo '
2024-01-15 15:30:45 +01:00
< br > '.Modules::link($dir == ' entrata ' ? ' Fatture di vendita ' : ' Fatture di acquisto ', $nota[' id ' ], $text , $text );
2022-07-15 17:21:25 +02:00
}
echo '
</ div > ' ;
}
// Fattura originale della Nota di credito
if ( ! empty ( $fattura -> ref_documento ) && $fattura -> isNota ()) {
$nota = Fattura :: find ( $fattura -> ref_documento );
echo '
2024-02-27 14:54:33 +01:00
< div class = " alert alert-info " >
< i class = " fa fa-info " ></ i > '.tr(' Questa è una _TIPO_ generata dalla seguente fattura ' , [
2024-03-20 11:13:28 +01:00
'_TIPO_' => $fattura -> tipo -> getTranslation ( 'name' ),
2024-02-27 14:54:33 +01:00
]) . ' :
2024-03-20 11:13:28 +01:00
< b > '.Modules::link($module->getTranslation(' name '), $fattura->ref_documento, tr(' Fattura num . _NUM_ del _DATE_ ' , [
2024-02-27 14:54:33 +01:00
'_NUM_' => $nota -> numero_esterno ,
'_DATE_' => dateFormat ( $nota -> data ),
])) . ' </ b >
</ div > ' ;
2022-07-15 17:21:25 +02:00
}
2022-03-07 12:47:58 +01:00
// Ricordo che si sta emettendo una fattura conto terzi
2024-03-20 11:13:28 +01:00
if ( $dir == 'entrata' && $fattura -> stato -> getTranslation ( 'name' ) == 'Bozza' ) {
2023-08-04 14:54:28 +02:00
if ( $fattura -> is_fattura_conto_terzi ) {
2022-03-07 12:47:58 +01:00
echo '
2024-02-27 14:54:33 +01:00
< div class = " alert alert-info " >
< i class = " fa fa-info " ></ i > '.tr("Questa è una fattura per conto di terzi. Nell' XML della Fattura Elettronica sarà indicato il fornitore _FORNITORE_ come cessionario e il cliente come cedente / prestatore " , ['_FORNITORE_' => ' " < b > '.stripslashes($database->fetchOne(' SELECT ragione_sociale FROM an_anagrafiche WHERE idanagrafica = '.prepare(setting(' Azienda predefinita ')))[' ragione_sociale ']).' </ b > " ']).'.</b>
</ div > ' ;
2022-03-07 12:47:58 +01:00
}
}
2021-02-25 15:16:05 +01:00
// Verifica aggiuntive sulla sequenzialità dei numeri
2024-02-26 11:14:09 +01:00
if ( $dir == 'entrata' ) {
2024-03-25 12:27:34 +01:00
// Calcolo il numero previsto solo se la data della fattura è maggiore o uguale all'impostazione "Data inizio verifica contatore fattura di vendita" oppure l'impostazione non è valorizzata.
2024-03-22 15:52:24 +01:00
if ( ! empty ( setting ( 'Data inizio verifica contatore fattura di vendita' ))) {
2024-03-25 12:27:34 +01:00
$dateFormat = 'd/m/Y' ;
2024-03-24 00:08:43 +01:00
$carbonDate = Carbon :: createFromFormat ( $dateFormat , setting ( 'Data inizio verifica contatore fattura di vendita' ));
2024-03-25 12:27:34 +01:00
$data_inizio_verifica_contatore = (( $carbonDate !== false ) ? $carbonDate -> format ( 'Y-m-d' ) : null );
2024-03-22 15:52:24 +01:00
}
if ( strtotime ( $fattura -> data ) >= strtotime ( $data_inizio_verifica_contatore ) || empty ( $data_inizio_verifica_contatore )) {
2024-02-26 11:14:09 +01:00
$numero_previsto = verifica_numero_fattura ( $fattura );
2024-03-22 15:52:24 +01:00
}
2020-03-02 16:13:07 +01:00
if ( ! empty ( $numero_previsto )) {
echo '
2024-02-27 14:54:33 +01:00
< div class = " alert alert-warning " >
< i class = " fa fa-warning " ></ i > '.tr("E' assente una fattura di vendita di numero _NUM_ in data precedente o corrispondente a _DATE_ : si potrebbero verificare dei problemi con la numerazione corrente delle fatture " , [
'_DATE_' => dateFormat ( $fattura -> data ),
'_NUM_' => '"' . $numero_previsto . '"' ,
]) . ' .</ b >
</ div > ' ;
2020-03-02 16:13:07 +01:00
}
2024-03-22 15:52:24 +01:00
2024-03-19 16:41:11 +01:00
$data_fattura = new DateTime ( $fattura -> data );
$data_odierna = new DateTime ();
$differenza = $data_odierna -> diff ( $data_fattura ) -> days ;
2024-03-22 15:52:24 +01:00
if ( $fattura -> codice_stato_fe == 'NS' && $fattura -> stato -> getTranslation ( 'name' ) != 'Non valida' && ( $differenza > setting ( 'Giorni validità fattura scartata' ))) {
2024-03-19 16:41:11 +01:00
echo '
< div class = " alert alert-error " >
2024-03-22 15:52:24 +01:00
< i class = " fa fa-warning " ></ i > '.tr(' Questa fattura è stata scartata e sono trascorsi i termini di reinvio , è necessario invalidare il documento . ').' </ b >
2024-03-19 16:41:11 +01:00
< button type = " button " class = " btn btn-xs btn-success " onclick = " risolviStato() " >< i class = " fa fa-cog " ></ i > '.tr(' Invalida il documento ').' </ button >
</ div > ' ;
}
2021-05-03 13:20:27 +02:00
// Verifica la data dell'intervento rispetto alla data della fattura
2021-09-17 10:30:36 +02:00
$fatturazione_futura = false ;
$data_fattura = new Carbon ( $fattura -> data );
$interventi_collegati = $fattura -> getDocumentiCollegati ()[ Intervento :: class ];
if ( ! empty ( $interventi_collegati )) {
foreach ( $interventi_collegati as $intervento ) {
2024-02-07 14:18:13 +01:00
$fine_intervento = $intervento -> fine ;
2021-09-17 10:30:36 +02:00
$fine_intervento = new Carbon ( $fine_intervento );
2021-05-03 13:20:27 +02:00
2021-09-17 10:30:36 +02:00
if ( $fine_intervento -> diffInDays ( $data_fattura , false ) < 0 ) {
2021-07-07 07:57:10 +02:00
$fatturazione_futura = true ;
2021-05-03 13:20:27 +02:00
break ;
}
}
2021-07-07 07:57:10 +02:00
if ( $fatturazione_futura ) {
2021-05-03 13:20:27 +02:00
echo '
2024-02-27 14:54:33 +01:00
< div class = " alert alert-warning " >
< i class = " fa fa-warning " ></ i > '.tr("Stai fatturando un' attività futura rispetto alla data di fatturazione . " ).'</b>
</ div > ' ;
2021-05-03 13:20:27 +02:00
}
}
2020-03-02 16:13:07 +01:00
}
2024-02-23 14:40:08 +01:00
$righe = $fattura -> getRighe ();
$righe_vuote = false ;
foreach ( $righe as $riga ) {
if ( $riga -> qta == 0 ) {
$righe_vuote = true ;
}
}
if ( $righe_vuote ) {
2024-03-22 15:52:24 +01:00
echo '
2024-02-27 14:54:33 +01:00
< div class = " alert alert-warning " id = " righe-vuote " >
2024-03-22 15:52:24 +01:00
< i class = " fa fa-warning " ></ i > '.tr(' Nel documento sono presenti delle righe con quantità a 0. ').' </ b >
2024-02-27 14:54:33 +01:00
</ div > ' ;
2024-02-23 14:40:08 +01:00
}
2017-08-04 16:28:16 +02:00
?>
2018-02-23 16:04:50 +01:00
< form action = " " method = " post " id = " edit-form " >
2017-08-04 16:28:16 +02:00
< input type = " hidden " name = " backto " value = " record-edit " >
< input type = " hidden " name = " op " value = " update " >
2018-02-09 14:25:40 +01:00
< input type = " hidden " name = " id_record " value = " <?php echo $id_record ; ?> " >
2017-08-04 16:28:16 +02:00
<!-- INTESTAZIONE -->
< div class = " panel panel-primary " >
< div class = " panel-heading " >
2018-02-09 14:25:40 +01:00
< h3 class = " panel-title " >< ? php echo tr ( 'Intestazione' ); ?> </h3>
2017-08-04 16:28:16 +02:00
</ div >
< div class = " panel-body " >
< div class = " row " >
2023-10-01 11:42:05 +02:00
<!-- id_segment -->
{[ " type " : " hidden " , " label " : " Segmento " , " name " : " id_segment " , " class " : " text-center " , " value " : " $id_segment $ " ]}
2017-11-07 19:19:52 +01:00
< ? php
if ( $dir == 'uscita' ) {
echo '
2019-11-13 19:07:24 +01:00
< div class = " col-md-2 " >
2019-09-13 11:29:45 +02:00
{[ " type " : " text " , " label " : " '.tr('Numero fattura/protocollo').' " , " required " : 1 , " name " : " numero " , " class " : " text-center alphanumeric-mask " , " value " : " $numero $ " ]}
</ div > ' ;
2021-05-25 15:15:16 +02:00
$label = tr ( 'N. fattura del fornitore' );
2020-02-13 03:09:49 +01:00
$size = 2 ;
2017-11-07 19:19:52 +01:00
} else {
2018-02-04 17:26:25 +01:00
$label = tr ( 'Numero fattura' );
2020-02-13 03:09:49 +01:00
$size = 4 ;
2017-11-07 19:19:52 +01:00
}
2024-01-15 15:30:45 +01:00
?>
2018-06-26 10:25:50 +02:00
2020-02-13 03:09:49 +01:00
< div class = " col-md-<?php echo $size ; ?> " >
2021-07-07 07:57:10 +02:00
{[ " type " : " text " , " label " : " <?php echo $label ; ?> " , " required " : " <?php echo ( $dir == 'uscita') ? 1 : 0; ?> " , " name " : " numero_esterno " , " class " : " text-center " , " value " : " $numero_esterno $ " , " help " : " <?php echo (empty( $record['numero_esterno'] ) and $dir == 'entrata') ? tr('Il numero della fattura sarà generato automaticamente in fase di emissione.') : ''; ?> " ]}
2017-08-04 16:28:16 +02:00
</ div >
2019-11-13 19:07:24 +01:00
< div class = " col-md-2 " >
2018-11-09 11:34:27 +01:00
{[ " type " : " date " , " label " : " <?php echo tr('Data emissione'); ?> " , " name " : " data " , " required " : 1 , " value " : " $data $ " ]}
2017-08-04 16:28:16 +02:00
</ div >
2018-09-27 15:50:03 +02:00
< ? php
2024-03-22 15:52:24 +01:00
$query = 'SELECT *, `co_statidocumento`.`id` AS id, `colore` AS _bgcolor_, `co_statidocumento_lang`.`name` as descrizione FROM `co_statidocumento` LEFT JOIN `co_statidocumento_lang` ON (`co_statidocumento_lang`.`id_record` = `co_statidocumento`.`id` AND `co_statidocumento_lang`.`id_lang` = ' . prepare ( Models\Locale :: getDefault () -> id ) . ')' ;
2018-09-27 15:50:03 +02:00
if ( empty ( $record [ 'is_fiscale' ])) {
2024-02-13 15:49:40 +01:00
$query .= " WHERE `name` = 'Bozza' " ;
2018-09-28 09:30:46 +02:00
2024-03-22 15:52:24 +01:00
$plugin = $dbo -> fetchArray ( 'SELECT `zz_plugins`.`id` FROM `zz_plugins` LEFT JOIN `zz_plugins_lang` ON (`zz_plugins`.`id` = `zz_plugins_lang`.`id_record` AND `zz_plugins_lang`.`id_lang` = ' . prepare ( Models\Locale :: getDefault () -> id ) . " ) WHERE `name`='Fatturazione Elettronica' AND `idmodule_to` = " . prepare ( $id_module ));
2018-09-28 09:30:46 +02:00
echo '<script>$("#link-tab_' . $plugin [ 0 ][ 'id' ] . '").addClass("disabled");</script>' ;
2018-09-27 15:50:03 +02:00
}
2020-09-08 11:38:25 +02:00
// Forzo il passaggio della fattura da Bozza ad Emessa per il corretto calcolo del numero.
2020-06-30 13:26:15 +02:00
elseif ( $record [ 'stato' ] == 'Bozza' ) {
2024-02-13 15:49:40 +01:00
$query .= " WHERE `name` IN ('Emessa', 'Bozza') " ;
2020-06-16 11:32:03 +02:00
}
2018-09-27 15:50:03 +02:00
2024-02-13 15:49:40 +01:00
$query .= ' ORDER BY `name`' ;
2023-09-27 17:04:00 +02:00
2018-09-27 15:50:03 +02:00
?>
2019-11-13 19:07:24 +01:00
< ? php if ( $dir == 'entrata' ) {
2024-01-15 15:30:45 +01:00
$readonly = '"readonly":1,' ;
}
?>
2019-08-26 11:10:59 +02:00
2020-02-13 03:09:49 +01:00
< div class = " col-md-2 " < ? php echo ( $dir == 'entrata' ) ? 'hidden' : '' ; ?> >
2020-10-16 18:17:20 +02:00
{[ " type " : " date " , " label " : " <?php echo tr('Data registrazione'); ?> " , < ? php echo $readonly ; ?> "name": "data_registrazione", "value": "$data_registrazione$", "help": "<?php echo tr('Data in cui si è effettuata la registrazione della fattura in contabilità'); ?>" ]}
2017-08-04 16:28:16 +02:00
</ div >
2020-09-08 16:51:43 +02:00
2020-07-30 20:06:33 +02:00
<!-- TODO : da nascondere per le fatture di vendita in quanto questa data sarà sempre uguale alla data di emissione -->
2024-03-11 11:29:38 +01:00
< div class = " col-md-2 " < ? php echo ( $record [ 'is_fiscale' ]) ? '' : 'hidden' ; ?> >
2023-11-17 16:42:28 +01:00
{[ " type " : " date " , " class " : " unblockable " , " label " : " <?php echo tr('Data competenza'); ?> " , " name " : " data_competenza " , " required " : 1 , " value " : " $data_competenza $ " , " min-date " : " $data $ " , " help " : " <?php echo tr('Data nella quale considerare il movimento contabile, che può essere posticipato rispetto la data della fattura'); ?> " ]}
2019-05-29 19:17:57 +02:00
</ div >
2019-07-22 15:45:36 +02:00
2024-02-27 14:54:33 +01:00
< ? php
2024-01-15 15:30:45 +01:00
if ( $dir == 'entrata' ) {
2024-03-22 15:52:24 +01:00
?>
2019-09-13 11:29:45 +02:00
2024-03-11 11:29:38 +01:00
< div class = " col-md-2 " < ? php echo ( $record [ 'is_fiscale' ]) ? '' : 'hidden' ; ?> >
2024-03-22 15:52:24 +01:00
{[ " type " : " select " , " label " : " <?php echo tr('Stato FE'); ?> " , " name " : " codice_stato_fe " , " values " : " query=SELECT `codice` as id, CONCAT_WS(' - ',`codice`, `name`) as text FROM `fe_stati_documento` LEFT JOIN `fe_stati_documento_lang` ON (`fe_stati_documento_lang`.`id_record` = `fe_stati_documento`.`codice` AND `fe_stati_documento_lang`.`id_lang` = <?php echo prepare(Models \ Locale::getDefault()->id); ?>) " , " value " : " $codice_stato_fe $ " , " disabled " : < ? php echo intval ( Interaction :: isEnabled () || ( $record [ 'stato' ] == 'Bozza' && $abilita_genera )); ?> , "class": "unblockable", "help": "<?php echo (!empty($record['data_stato_fe'])) ? Translator::timestampToLocale($record['data_stato_fe']) : ''; ?>" ]}
2019-09-13 11:29:45 +02:00
</ div >
2024-02-27 14:54:33 +01:00
< ? php
2024-01-15 15:30:45 +01:00
}
2019-09-13 11:29:45 +02:00
2024-01-31 14:23:46 +01:00
echo '
2024-03-11 11:29:38 +01:00
< div class = " col-md-'.( $record['is_fiscale'] ? 2 : 6).' " >
2024-03-20 11:13:28 +01:00
{[ " type " : " select " , " label " : " '.tr('Stato').' " , " name " : " idstatodocumento " , " required " : 1 , " values " : " query='. $query .' " , " value " : " '. $fattura->stato ->id.' " , " class " : " '.(( $fattura->stato ->getTranslation('name') != 'Bozza' && ! $abilita_genera ) ? '' : 'unblockable').' " , " extra " : " onchange= \" return cambiaStato() \" " ]}
2019-09-13 11:29:45 +02:00
</ div >
2017-08-04 16:28:16 +02:00
</ div >
< div class = " row " >
2021-02-11 15:05:29 +01:00
< div class = " col-md-4 " >
2020-09-08 11:38:25 +02:00
'.Modules::link(' Anagrafiche ', $record[' idanagrafica '], null, null, ' class = " pull-right " ' );
2018-01-15 20:28:36 +01:00
2024-01-15 15:30:45 +01:00
if ( $dir == 'entrata' ) {
?>
2020-10-16 18:17:20 +02:00
{[ " type " : " select " , " label " : " <?php echo tr('Cliente'); ?> " , " name " : " idanagrafica " , " required " : 1 , " ajax-source " : " clienti " , " help " : " <?php echo tr( " In caso di autofattura indicare l 'azienda: ").stripslashes($database->fetchOne(' SELECT ragione_sociale FROM an_anagrafiche WHERE idanagrafica = '.prepare(setting(' Azienda predefinita ')))[' ragione_sociale ' ]); ?> ", "value": "$idanagrafica$" ]}
2024-02-27 14:54:33 +01:00
< ? php
2024-01-15 15:30:45 +01:00
} else {
2024-03-22 15:52:24 +01:00
?>
2018-08-11 15:49:46 +02:00
{[ " type " : " select " , " label " : " <?php echo tr('Fornitore'); ?> " , " name " : " idanagrafica " , " required " : 1 , " ajax-source " : " fornitori " , " value " : " $idanagrafica $ " ]}
2024-02-27 14:54:33 +01:00
< ? php
2024-01-15 15:30:45 +01:00
}
2020-03-02 16:13:07 +01:00
2024-01-15 15:30:45 +01:00
echo '
2020-07-31 14:25:50 +02:00
</ div > ' ;
2020-03-02 16:13:07 +01:00
2024-01-15 15:30:45 +01:00
if ( $dir == 'entrata' ) {
echo '
2022-05-18 16:36:22 +02:00
< div class = " col-md-4 " > ' ;
2024-01-15 15:30:45 +01:00
if ( $record [ 'idagente' ] != 0 ) {
echo Modules :: link ( 'Anagrafiche' , $record [ 'idagente_fattura' ], null , null , 'class="pull-right"' );
}
echo '
2020-07-31 14:25:50 +02:00
{[ " type " : " select " , " label " : " '.tr('Agente di riferimento').' " , " name " : " idagente " , " ajax-source " : " agenti " , " select-options " : { " idanagrafica " : '.$record[' idanagrafica '].' }, " value " : " $idagente_fattura $ " ]}
</ div > ' ;
2024-01-15 15:30:45 +01:00
}
2021-02-11 15:05:29 +01:00
2024-01-15 15:30:45 +01:00
echo '
2021-02-11 15:05:29 +01:00
< div class = " col-md-4 " > ' ;
2024-01-15 15:30:45 +01:00
if ( ! empty ( $record [ 'idreferente' ])) {
echo Plugins :: link ( 'Referenti' , $record [ 'idanagrafica' ], null , null , 'class="pull-right"' );
}
2024-03-20 11:13:28 +01:00
$id_modulo_anagrafiche = ( new Module ()) -> getByField ( 'name' , 'Anagrafiche' );
2024-01-15 15:30:45 +01:00
echo '
2024-03-20 11:13:28 +01:00
{[ " type " : " select " , " label " : " '.tr('Referente').' " , " name " : " idreferente " , " value " : " $idreferente $ " , " ajax-source " : " referenti " , " select-options " : { " idanagrafica " : '.$record[' idanagrafica '].' , " idsede_destinazione " : '.$record[' idsede_destinazione '].' }, " icon-after " : " add|'. $id_modulo_anagrafiche .'|id_plugin='.(new Plugin())->getByField('name', 'Referenti').'&id_parent='. $record['idanagrafica'] .'||'.(intval( $block_edit ) ? 'disabled' : '').' " ]}
2021-02-11 15:05:29 +01:00
</ div > ' ;
2019-08-26 11:10:59 +02:00
2024-01-15 15:30:45 +01:00
echo '
2022-03-08 14:59:03 +01:00
</ div >
< div class = " row " > ' ;
2024-01-15 15:30:45 +01:00
// Conteggio numero articoli fatture
2024-02-29 15:10:55 +01:00
$articolo = $dbo -> fetchArray ( 'SELECT `mg_articoli`.`id` FROM ((`mg_articoli` INNER JOIN `co_righe_documenti` ON `mg_articoli`.`id`=`co_righe_documenti`.`idarticolo`) INNER JOIN `co_documenti` ON `co_documenti`.`id`=`co_righe_documenti`.`iddocumento`) WHERE `co_documenti`.`id`=' . prepare ( $id_record ));
2024-03-20 11:13:28 +01:00
$id_plugin_sedi = ( new Plugin ()) -> getByField ( 'name' , 'Sedi' );
2024-01-15 15:30:45 +01:00
if ( $dir == 'entrata' ) {
echo '
2020-07-31 14:25:50 +02:00
< div class = " col-md-3 " >
2023-06-26 12:41:34 +02:00
{[ " type " : " select " , " label " : " '.tr('Partenza merce').' " , " name " : " idsede_partenza " , " ajax-source " : " sedi_azienda " , " value " : " $idsede_partenza $ " , " help " : " '.tr( " Sedi di partenza dell 'azienda").' " ]}
2020-07-31 14:25:50 +02:00
</ div >
2020-03-02 16:13:07 +01:00
2020-07-31 14:25:50 +02:00
< div class = " col-md-3 " >
{[ " type " : " select " , " label " : " '.tr('Destinazione merce').' " , " name " : " idsede_destinazione " , " ajax-source " : " sedi " , " select-options " : { " idanagrafica " : '.$record[' idanagrafica '].' }, " value " : " $idsede_destinazione $ " , " help " : " '.tr('Sedi del destinatario').' " , " icon-after " : " add|'. $id_modulo_anagrafiche .'|id_plugin='. $id_plugin_sedi .'&id_parent='. $record['idanagrafica'] .'||'.(intval( $block_edit ) ? 'disabled' : '').' " ]}
</ div > ' ;
2024-01-15 15:30:45 +01:00
} else {
echo '
2020-07-31 14:25:50 +02:00
< div class = " col-md-3 " >
2020-08-11 08:10:06 +02:00
{[ " type " : " select " , " label " : " '.tr('Partenza merce').' " , " name " : " idsede_partenza " , " ajax-source " : " sedi " , " select-options " : { " idanagrafica " : '.$record[' idanagrafica '].' }, " value " : " $idsede_partenza $ " , " help " : " '.tr('Sedi del mittente').' " , " icon-after " : " add|'. $id_modulo_anagrafiche .'|id_plugin='. $id_plugin_sedi .'&id_parent='. $record['idanagrafica'] .'||'.(intval( $block_edit ) ? 'disabled' : '').' " ]}
2020-07-31 14:25:50 +02:00
</ div >
2020-02-01 11:02:23 +01:00
2020-07-31 14:25:50 +02:00
< div class = " col-md-3 " >
{[ " type " : " select " , " label " : " '.tr('Destinazione merce').' " , " name " : " idsede_destinazione " , " ajax-source " : " sedi_azienda " , " value " : " $idsede_destinazione $ " , " help " : " '.tr( " Sedi di arrivo dell 'azienda").' " ]}
</ div > ' ;
2024-01-15 15:30:45 +01:00
}
?>
2019-05-17 06:00:15 +02:00
</ div >
< hr >
< div class = " row " >
< div class = " col-md-3 " >
<!-- Nella realtà la fattura accompagnatoria non può esistere per la fatturazione elettronica , in quanto la risposta dal SDI potrebbe non essere immediata e le merci in viaggio . Dunque si può emettere una documento di viaggio valido per le merci ed eventualmente una fattura pro - forma per l ' incasso della stessa , emettendo infine la fattura elettronica differita . -->
2024-03-22 15:52:24 +01:00
{[ " type " : " select " , " label " : " <?php echo tr('Tipo documento'); ?> " , " name " : " idtipodocumento " , " required " : 1 , " values " : " query=SELECT `co_tipidocumento`.`id`, CONCAT_WS(' - ',`codice_tipo_documento_fe`, `name`) AS descrizione FROM `co_tipidocumento` LEFT JOIN `co_tipidocumento_lang` ON (`co_tipidocumento`.`id` = `co_tipidocumento_lang`.`id_record` AND `co_tipidocumento_lang`.`id_lang` = <?php echo prepare(Models \ Locale::getDefault()->id); ?>) WHERE `dir`='<?php echo $dir ; ?>' AND ((`reversed` = 0 AND `id_segment` ='<?php echo $record['id_segment'] ; ?>') OR `co_tipidocumento`.`id` = <?php echo $record['idtipodocumento'] ; ?>) ORDER BY `codice_tipo_documento_fe` " , " value " : " $idtipodocumento $ " , " readonly " : < ? php echo intval ( $record [ 'stato' ] != 'Bozza' && $record [ 'stato' ] != 'Annullata' ); ?> , "help": "<?php echo ($database->fetchOne('SELECT tipo FROM an_anagrafiche WHERE idanagrafica = '.prepare($record['idanagrafica']))['tipo'] == 'Ente pubblico') ? 'FPA12 - fattura verso PA (Ente pubblico)' : 'FPR12 - fattura verso soggetti privati (Azienda o Privato)'; ?>" ]}
2019-05-17 06:00:15 +02:00
</ div >
2024-02-26 15:53:39 +01:00
2019-05-17 06:00:15 +02:00
< div class = " col-md-3 " >
2021-07-07 07:57:10 +02:00
< ? php echo ! empty ( $record [ 'idpagamento' ]) ? Modules :: link ( 'Pagamenti' , $record [ 'idpagamento' ], null , null , 'class="pull-right"' ) : '' ; ?>
2021-05-25 15:15:16 +02:00
2022-07-07 17:28:18 +02:00
{[ " type " : " select " , " label " : " <?php echo tr('Pagamento'); ?> " , " name " : " idpagamento " , " required " : 1 , " ajax-source " : " pagamenti " , " value " : " $idpagamento $ " , " extra " : " onchange= \" if( $ (this).selectData()) { $ ( '#id_banca_azienda' ) . selectSetNew ( $ ( this ) . selectData () . id_banca_ < ? php echo $conto ; ?> , $(this).selectData().descrizione_banca_<?php echo $conto; ?> ).change(); } \" " ]}
2019-05-17 06:00:15 +02:00
</ div >
< div class = " col-md-3 " >
2023-08-04 14:54:28 +02:00
< ? php if ( $record [ 'id_banca_azienda' ] != 0 ) {
2024-01-15 15:30:45 +01:00
echo Modules :: link ( 'Banche' , $record [ 'id_banca_azienda' ], null , null , 'class="pull-right"' );
}
2024-03-20 11:13:28 +01:00
$id_module_banche = ( new Module ()) -> getByField ( 'name' , 'Banche' );
2024-01-15 15:30:45 +01:00
if ( $dir == 'entrata' ) {
echo '
2024-03-05 16:01:45 +01:00
{[ " type " : " select " , " label " : " '.tr('Banca accredito').' " , " name " : " id_banca_azienda " , " ajax-source " : " banche " , " select-options " : '.json_encode([' id_anagrafica ' => $anagrafica_azienda->id]).' , " value " : " $id_banca_azienda $ " , " icon-after " : " add|'. $id_module_banche .'|id_anagrafica='. $anagrafica_azienda->id .' " , " extra " : " '.(intval( $block_edit ) ? 'disabled' : '').' " ]}
2023-11-24 18:24:20 +01:00
</ div >
2023-11-24 13:20:00 +01:00
< div class = " col-md-3 " >
2024-03-05 16:01:45 +01:00
{[ " type " : " select " , " label " : " '.tr('Banca addebito').' " , " name " : " id_banca_controparte " , " ajax-source " : " banche " , " select-options " : '.json_encode([' id_anagrafica ' => $record[' idanagrafica ']]).' , " value " : " $id_banca_controparte $ " , " icon-after " : " add|'. $id_module_banche .'|idanagrafica='. $record['idanagrafica'] .' " , " extra " : " '.(intval( $block_edit ) ? 'disabled' : '').' " ]} ' ;
2024-01-15 15:30:45 +01:00
} else {
echo '
2024-03-05 16:01:45 +01:00
{[ " type " : " select " , " label " : " '.tr('Banca accredito').' " , " name " : " id_banca_controparte " , " ajax-source " : " banche " , " select-options " : '.json_encode([' id_anagrafica ' => $record[' idanagrafica ']]).' , " value " : " $id_banca_controparte $ " , " icon-after " : " add|'. $id_module_banche .'|idanagrafica='. $record['idanagrafica'] .' " , " extra " : " '.(intval( $block_edit ) ? 'disabled' : '').' " ]}
2023-11-24 18:24:20 +01:00
</ div >
< div class = " col-md-3 " >
2024-03-05 16:01:45 +01:00
{[ " type " : " select " , " label " : " '.tr('Banca addebito').' " , " name " : " id_banca_azienda " , " ajax-source " : " banche " , " select-options " : '.json_encode([' id_anagrafica ' => $anagrafica_azienda->id]).' , " value " : " $id_banca_azienda $ " , " icon-after " : " add|'. $id_module_banche .'|id_anagrafica='. $anagrafica_azienda->id .' " , " extra " : " '.(intval( $block_edit ) ? 'disabled' : '').' " ]} ' ;
2024-01-15 15:30:45 +01:00
}
?>
2023-11-24 18:24:20 +01:00
</ div >
2024-02-27 14:54:33 +01:00
</ div >
2023-11-24 18:24:20 +01:00
2023-11-24 13:20:00 +01:00
<!-- Split payment + Fattura per conto terzi ( solo uscita ) + Sconto in fattura ( solo uscita ) -->
< div class = " row " >
< div class = " col-md-3 " >
2024-02-27 14:54:33 +01:00
{[ " type " : " checkbox " , " label " : " <?php echo tr('Split payment'); ?> " , " name " : " split_payment " , " value " : " $split_payment $ " , " help " : " <?php echo tr('Abilita lo split payment per questo documento. Le aliquote iva con natura N6.X (reverse charge) non saranno disponibili.'); ?> " , " placeholder " : " <?php echo tr('Split payment'); ?> " ]}
</ div >
2023-11-24 13:20:00 +01:00
2024-02-27 14:54:33 +01:00
< ? php
2024-01-15 15:30:45 +01:00
// TODO: Fattura per conto del fornitore (es. cooperative agricole che emettono la fattura per conto dei propri soci produttori agricoli conferenti)
if ( $dir == 'entrata' ) {
?>
2024-02-27 14:54:33 +01:00
< div class = " col-md-3 " >
{[ " type " : " checkbox " , " label " : " <?php echo tr('Fattura per conto terzi'); ?> " , " name " : " is_fattura_conto_terzi " , " value " : " $is_fattura_conto_terzi $ " , " help " : " <?php echo tr('Nell \ 'XML della Fattura Elettronica sarà indicato il fornitore ('.stripslashes( $database->fetchOne ('SELECT ragione_sociale FROM an_anagrafiche WHERE idanagrafica = '.prepare(setting('Azienda predefinita')))['ragione_sociale']).') come cessionario e il cliente come cedente/prestatore.'); ?> " , " placeholder " : " <?php echo tr('Fattura per conto terzi'); ?> " ]}
</ div >
< ? php
echo '
< div class = " col-md-3 " >
{[ " type " : " number " , " label " : " '.tr('Sconto in fattura').' " , " name " : " sconto_finale " , " value " : " '.( $fattura->sconto_finale_percentuale ?: $fattura->sconto_finale ).' " , " icon-after " : " choice|untprc|'.(empty( $fattura->sconto_finale ) ? 'PRC' : 'UNT').' " , " help " : " '.tr('Sconto in fattura, utilizzabile per applicare sconti sul Netto a pagare del documento e le relative scadenze').'. '.tr('Per utilizzarlo in relazione a una riga della Fattura Elettronica, inserire il tipo di dato in \ ' \ 'Attributi avanzati \ ' \ ' -> \ ' \ 'Altri Dati Gestionali \ ' \ ' -> \ ' \ 'TipoDato \ ' \ ' e il testo di descrizione in \ ' \ 'Attributi avanzati \ ' \ ' -> \ ' \ 'Altri Dati Gestionali \ ' \ ' -> \ ' \ 'RiferimentoTesto \ ' \ ' della specifica riga').'. '.tr('Nota: lo sconto in fattura non influenza i movimenti contabili').'. " ]}
</ div > ' ;
2024-01-15 15:30:45 +01:00
} else {
echo '
2024-02-27 14:54:33 +01:00
< div class = " col-md-3 " ></ div >
< div class = " col-md-3 " ></ div > ' ;
2024-01-15 15:30:45 +01:00
}
2019-05-17 06:00:15 +02:00
2024-01-15 15:30:45 +01:00
if ( $record [ 'stato' ] != 'Bozza' && $record [ 'stato' ] != 'Annullata' ) {
$scadenze = $fattura -> scadenze ;
2020-09-07 14:52:46 +02:00
2024-01-15 15:30:45 +01:00
$ricalcola = true ;
foreach ( $scadenze as $scadenza ) {
$ricalcola = empty ( floatval ( $scadenza -> pagato )) && $ricalcola ;
}
2019-03-08 16:59:55 +01:00
2024-01-15 15:30:45 +01:00
echo '
2017-08-04 16:28:16 +02:00
< div class = " col-md-3 " >
2020-01-14 22:29:52 +01:00
< p class = " pull-left " >< strong > '.tr(' Scadenze ').' </ strong ></ p >
< div class = " btn-group pull-right " >
'.Modules::link(' Scadenzario ', $scadenze[0][' id '], tr(' < i class = " fa fa-edit tip " title = " '.tr('Modifica scadenze').' " ></ i > '), ' ', ' class = " btn btn-xs btn-primary " ' );
2020-09-07 14:52:46 +02:00
2024-01-15 15:30:45 +01:00
// Ricalcola scadenze disponibile solo per fatture di acquisto
2024-03-22 17:43:28 +01:00
if ( $fattura -> isFE () && $ricalcola && $module -> getTranslation ( 'name' ) == 'Fatture di acquisto' ) {
2024-01-15 15:30:45 +01:00
echo '
2020-01-22 14:55:22 +01:00
< button type = " button " class = " btn btn-info btn-xs pull-right tip " title = " '.tr('Ricalcola le scadenze').'. '.tr('Per ricalcolare correttamente le scadenze, imposta la fattura di acquisto nello stato \ ' \ 'Bozza \ ' \ ' e correggi il documento come desiderato, poi re-imposta lo stato \ ' \ 'Emessa \ ' \ ' e utilizza questa funzione').'. " id = " ricalcola_scadenze " >
2020-01-14 22:29:52 +01:00
< i class = " fa fa-calculator " aria - hidden = " true " ></ i >
</ button > ' ;
2024-01-15 15:30:45 +01:00
}
echo '
2020-08-11 08:16:36 +02:00
</ div >
2020-01-14 22:29:52 +01:00
< div class = " clearfix " ></ div > ' ;
2024-01-15 15:30:45 +01:00
foreach ( $scadenze as $scadenza ) {
$pagamento_iniziato = ! empty ( floatval ( $scadenza -> pagato )) || $scadenza -> da_pagare == 0 ;
2020-09-07 14:52:46 +02:00
2024-01-15 15:30:45 +01:00
echo '
2020-09-07 14:52:46 +02:00
< p > '.dateFormat($scadenza[' scadenza ']).' : ' ;
2019-03-08 16:59:55 +01:00
2024-01-15 15:30:45 +01:00
if ( $pagamento_iniziato ) {
echo '
2024-02-27 14:54:33 +01:00
< strike > ' ;
2024-01-15 15:30:45 +01:00
}
2019-03-08 16:59:55 +01:00
2024-01-15 15:30:45 +01:00
echo ( empty ( $scadenza -> da_pagare ) ? '<i class="fa fa-exclamation-triangle"></i>' : '' ) . moneyFormat ( $scadenza -> da_pagare );
2019-03-08 16:59:55 +01:00
2024-01-15 15:30:45 +01:00
if ( $pagamento_iniziato ) {
echo '
2024-02-27 14:54:33 +01:00
</ strike > ' ;
2024-01-15 15:30:45 +01:00
}
2019-03-08 16:59:55 +01:00
2024-01-15 15:30:45 +01:00
if ( $pagamento_iniziato && $scadenza -> pagato != $scadenza -> da_pagare ) {
echo ' (' . moneyFormat ( $scadenza -> da_pagare - $scadenza -> pagato ) . ')' ;
}
2020-09-07 14:52:46 +02:00
2024-01-15 15:30:45 +01:00
echo '
2019-03-08 16:59:55 +01:00
</ p > ' ;
2024-01-15 15:30:45 +01:00
}
2019-03-08 16:59:55 +01:00
2024-01-15 15:30:45 +01:00
echo '
2017-08-04 16:28:16 +02:00
</ div > ' ;
2024-01-15 15:30:45 +01:00
}
?>
2022-03-07 12:47:58 +01:00
</ div >
< div class = " row " >
< div class = " col-md-6 " >
2022-01-15 18:21:48 +01:00
< ? php echo ! empty ( $record [ 'id_ritenuta_contributi' ]) ? Modules :: link ( 'Ritenute previdenziali' , $record [ 'id_ritenuta_contributi' ], null , null , 'class="pull-right"' ) : '' ; ?>
{[ " type " : " select " , " label " : " <?php echo tr('Ritenuta previdenziale'); ?> " , " name " : " id_ritenuta_contributi " , " value " : " $id_ritenuta_contributi $ " , " values " : " query=SELECT *, CONCAT(descrizione,(IF(percentuale>0, CONCAT( \" - \" , percentuale, \" % sul \" , percentuale_imponibile, \" % imponibile \" ), \" \" ))) AS descrizione FROM co_ritenuta_contributi " , " help " : " <?php echo tr('Ritenuta previdenziale da applicare alle righe della fattura.'); ?> " ]}
2019-02-15 12:12:44 +01:00
</ div >
2019-09-13 11:29:45 +02:00
< ? php
2024-01-15 15:30:45 +01:00
if ( $dir == 'uscita' ) {
echo '
2024-02-27 14:54:33 +01:00
< div class = " col-md-6 " >
{[ " type " : " checkbox " , " label " : " '.tr('Ritenuta pagata dal fornitore').' " , " name " : " is_ritenuta_pagata " , " value " : " $is_ritenuta_pagata $ " ]}
</ div > ' ;
2024-01-15 15:30:45 +01:00
}
if ( $dir == 'entrata' ) {
echo '
2024-02-27 14:54:33 +01:00
< div class = " col-md-6 " > ' ;
2021-02-23 12:02:47 +01:00
2024-01-15 15:30:45 +01:00
if ( ! empty ( $record [ 'id_dichiarazione_intento' ])) {
echo Plugins :: link ( " Dichiarazioni d'Intento " , $record [ 'idanagrafica' ], null , null , 'class="pull-right"' );
}
2021-02-24 09:24:29 +01:00
2024-01-15 15:30:45 +01:00
echo '
2024-03-20 11:13:28 +01:00
{[ " type " : " select " , " label " : " '.tr( " Dichiarazione d 'intento").' " , " name " : " id_dichiarazione_intento " , " help " : " '.tr(' Elenco delle dichiarazioni d\ 'intento definite all\'interno dell\'anagrafica del cliente' ) . '.", "ajax-source": "dichiarazioni_intento", "select-options": {"idanagrafica": ' . $record [ 'idanagrafica' ] . ', "data": "' . $record [ 'data' ] . '"},"value": "$id_dichiarazione_intento$", "icon-after": "add|' . $id_modulo_anagrafiche . '|id_plugin=' . ( new Plugin ()) -> getByField ( 'name' , 'Dichiarazioni d\'intento' ) . '&id_parent=' . $record [ 'idanagrafica' ] . '", "extra": "' . (( intval ( $block_edit )) ? 'disabled' : '' ) . ' " ]}
2024-02-27 14:54:33 +01:00
</ div > ' ;
2024-01-15 15:30:45 +01:00
}
2024-01-31 14:23:46 +01:00
echo '
2020-12-02 11:31:52 +01:00
</ div > ' ;
2021-02-26 18:45:52 +01:00
2024-01-15 15:30:45 +01:00
if ( $dir == 'entrata' ) {
echo '
2020-12-02 11:31:52 +01:00
< div class = " row " >
< div class = " col-md-3 " >
{[ " type " : " checkbox " , " label " : " '.tr('Marca da bollo automatica').' " , " name " : " bollo_automatico " , " value " : " '.intval(!isset( $record['bollo'] )).' " , " help " : " '.tr( " Seleziona per impostare automaticamente l 'importo della marca da bollo").' . '.tr(' Applicata solo se il totale della fattura è maggiore di _MONEY_ ' , [
2024-03-22 15:52:24 +01:00
'_MONEY_' => moneyFormat ( setting ( " Soglia minima per l'applicazione della marca da bollo " )),
]) . '.", "placeholder": "' . tr ( 'Bollo automatico' ) . ' " ]}
2020-12-02 11:31:52 +01:00
</ div >
< div class = " col-md-3 bollo " >
{[ " type " : " checkbox " , " label " : " '.tr('Addebita marca da bollo').' " , " name " : " addebita_bollo " , " value " : " $addebita_bollo $ " ]}
</ div >
2017-08-04 16:28:16 +02:00
2020-12-02 11:31:52 +01:00
< div class = " col-md-3 bollo " >
{[ " type " : " number " , " label " : " '.tr('Importo marca da bollo').' " , " name " : " bollo " , " value " : " $bollo $ " ]}
2021-02-23 11:34:37 +01:00
</ div >
2020-12-02 11:31:52 +01:00
</ div > ' ;
2021-02-26 18:45:52 +01:00
2024-01-15 15:30:45 +01:00
$bollo = new Bollo ( $fattura );
}
2020-12-02 11:31:52 +01:00
?>
2017-08-04 16:28:16 +02:00
< div class = " row " >
2023-04-13 17:28:41 +02:00
< div class = " col-md-6 " >
2022-08-04 18:16:49 +02:00
{[ " type " : " textarea " , " label " : " <?php echo tr('Note'); ?> " , " name " : " note " , " help " : " <?php echo tr('Note visibili anche in fattura.'); ?> " , " value " : " $note $ " , " charcounter " : 1 ]}
2023-04-13 17:28:41 +02:00
</ div >
< div class = " col-md-6 " >
2020-06-15 18:02:15 +02:00
{[ " type " : " textarea " , " label " : " <?php echo tr('Note interne'); ?> " , " name " : " note_aggiuntive " , " help " : " <?php echo tr('Note interne.'); ?> " , " value " : " $note_aggiuntive $ " , " class " : " unblockable " ]}
2017-08-04 16:28:16 +02:00
</ div >
</ div >
</ div >
</ div >
2018-09-24 11:24:48 +02:00
< ? php
2020-09-08 11:38:25 +02:00
if ( $record [ 'descrizione_tipo' ] == 'Fattura accompagnatoria di vendita' ) {
2018-09-24 11:24:48 +02:00
echo '
< div class = " box box-info " >
< div class = " box-header with-border " >
< h3 class = " box-title " >< i class = " fa fa-edit " ></ i > '.tr(' Dati Fattura accompagnatoria ').' </ h3 >
</ div >
< div class = " box-body " >
< div class = " row " >
< div class = " col-md-3 " >
2024-03-20 11:13:28 +01:00
{[ " type " : " select " , " label " : " '.tr('Aspetto beni').' " , " name " : " idaspettobeni " , " placeholder " : " " , " ajax-source " : " aspetto-beni " , " value " : " $idaspettobeni $ " , " icon-after " : " add|'.(new Module())->getByField('name', 'Aspetto beni').'||'.(( $record['stato'] != 'Bozza') ? 'disabled' : '').' " ]}
2018-09-24 11:24:48 +02:00
</ div >
< div class = " col-md-3 " >
2024-03-20 11:13:28 +01:00
{[ " type " : " select " , " label " : " '.tr('Causale trasporto').' " , " name " : " idcausalet " , " placeholder " : " " , " ajax-source " : " causali " , " value " : " $idcausalet $ " , " icon-after " : " add|'.(new Module())->getByField('name', 'Causali').'||'.(( $record['stato'] != 'Bozza') ? 'disabled' : '').' " ]}
2018-09-24 11:24:48 +02:00
</ div >
< div class = " col-md-3 " >
2024-03-22 15:52:24 +01:00
{[ " type " : " select " , " label " : " '.tr('Porto').' " , " name " : " idporto " , " placeholder " : " " , " values " : " query=SELECT `dt_porto`.`id`, `dt_porto_lang`.`name` as descrizione FROM `dt_porto` LEFT JOIN `dt_porto_lang` ON (`dt_porto`.`id` = `dt_porto_lang`.`id_record` AND `dt_porto_lang`.`id_lang` = '.prepare(Models \ Locale::getDefault()->id).') ORDER BY `name` ASC " , " value " : " $idporto $ " ]}
2018-09-24 11:24:48 +02:00
</ div >
< div class = " col-md-3 " >
{[ " type " : " text " , " label " : " '.tr('Num. colli').' " , " name " : " n_colli " , " value " : " $n_colli $ " ]}
</ div >
</ div >
< div class = " row " >
< div class = " col-md-3 " >
2024-03-22 15:52:24 +01:00
{[ " type " : " select " , " label " : " '.tr('Tipo di spedizione').' " , " name " : " idspedizione " , " values " : " query=SELECT `dt_spedizione`.`id`, `dt_spedizione_lang`.`name` as descrizione, `esterno` FROM `dt_spedizione` LEFT JOIN `dt_spedizione_lang` ON (`dt_spedizione`.`id` = `dt_spedizione_lang`.`id_record` AND `dt_spedizione_lang`.`id_lang` = '.prepare(Models \ Locale::getDefault()->id).') ORDER BY `name` ASC " , " value " : " $idspedizione $ " ]}
2018-09-24 11:24:48 +02:00
</ div >
2022-03-01 12:53:34 +01:00
< div class = " col-md-3 " > ' ;
2023-08-04 14:54:28 +02:00
if ( ! empty ( $record [ 'idvettore' ])) {
echo Modules :: link ( 'Anagrafiche' , $record [ 'idvettore' ], null , null , 'class="pull-right"' );
}
$esterno = $dbo -> selectOne ( 'dt_spedizione' , 'esterno' , [
2024-03-22 15:52:24 +01:00
'id' => $record [ 'idspedizione' ],
])[ 'esterno' ]; ?>
2022-03-01 12:53:34 +01:00
2024-03-22 15:52:24 +01:00
{[ " type " : " select " , " label " : " <?php echo tr('Vettore'); ?> " , " name " : " idvettore " , " ajax-source " : " vettori " , " value " : " $idvettore $ " , " disabled " : < ? php echo empty ( $esterno ) || ( ! empty ( $esterno ) && ! empty ( $record [ 'idvettore' ])) ? 1 : 0 ; ?> , "required": <?php echo !empty($esterno) ?: 0; ?>, "icon-after": "add|<?php echo $id_modulo_anagrafiche; ?>|tipoanagrafica=Vettore&readonly_tipo=1|btn_idvettore|<?php echo ($esterno and (intval(!$record['flag_completato']) || empty($record['idvettore']))) ? '' : 'disabled'; ?>", "class": "<?php echo empty($record['idvettore']) ? 'unblockable' : ''; ?>" ]}
2018-09-24 11:24:48 +02:00
</ div >
2018-11-23 16:48:30 +01:00
2024-02-27 14:54:33 +01:00
< script >
$ ( " #idspedizione " ) . change ( function () {
if ( $ ( this ) . val ()){
if ( ! $ ( this ) . selectData () . esterno ) {
$ ( " #idvettore " ) . attr ( " required " , false );
input ( " idvettore " ) . disable ();
$ ( " label[for=idvettore] " ) . text ( " <?php echo tr('Vettore'); ?> " );
$ ( " #idvettore " ) . selectReset ( " <?php echo tr( " Seleziona un\ ' opzione " ); ?> " );
$ ( " .btn_idvettore " ) . prop ( " disabled " , true );
$ ( " .btn_idvettore " ) . addClass ( " disabled " );
} else {
$ ( " #idvettore " ) . attr ( " required " , true );
input ( " idvettore " ) . enable ();
$ ( " label[for=idvettore] " ) . text ( " <?php echo tr('Vettore'); ?>* " );
$ ( " .btn_idvettore " ) . prop ( " disabled " , false );
$ ( " .btn_idvettore " ) . removeClass ( " disabled " );
}
} else {
$ ( " #idvettore " ) . attr ( " required " , false );
input ( " idvettore " ) . disable ();
$ ( " label[for=idvettore] " ) . text ( " <?php echo tr('Vettore'); ?> " );
$ ( " #idvettore " ) . selectReset ( " <?php echo tr( " Seleziona un\ ' opzione " ); ?> " );
$ ( " .btn_idvettore " ) . prop ( " disabled " , true );
$ ( " .btn_idvettore " ) . addClass ( " disabled " );
}
});
$ ( " #idcausalet " ) . change ( function () {
if ( $ ( this ) . val () == 3 ) {
$ ( " #tipo_resa " ) . attr ( " disabled " , false );
} else {
$ ( " #tipo_resa " ) . attr ( " disabled " , true );
}
});
</ script >
2022-03-01 12:53:34 +01:00
< ? php
2018-11-23 16:48:30 +01:00
$tipo_resa = [
[
'id' => 'EXW' ,
'text' => 'EXW' ,
],
[
'id' => 'FCA' ,
'text' => 'FCA' ,
],
[
'id' => 'FAS' ,
'text' => 'FAS' ,
],
[
'id' => 'FOB' ,
'text' => 'FOB' ,
],
[
'id' => 'CFR' ,
'text' => 'CFR' ,
],
[
'id' => 'CIF' ,
'text' => 'CIF' ,
],
[
'id' => 'CPT' ,
'text' => 'CPT' ,
],
[
'id' => 'CIP' ,
'text' => 'CIP' ,
],
[
'id' => 'DAF' ,
'text' => 'DAF' ,
],
[
'id' => 'DES' ,
'text' => 'DES' ,
],
[
'id' => 'DEQ' ,
'text' => 'DEQ' ,
],
[
'id' => 'DDU' ,
'text' => 'DDU' ,
],
[
'id' => 'DDP' ,
'text' => 'DDP' ,
2018-11-30 16:10:15 +01:00
],
2018-11-23 16:48:30 +01:00
];
echo '
< div class = " col-md-3 " >
2020-07-08 08:45:55 +02:00
{[ " type " : " select " , " label " : " '.tr('Tipo Resa').' " , " name " : " tipo_resa " , " value " : " $tipo_resa $ " , " values " : '.json_encode($tipo_resa).' , " readonly " : '.intval($record[' causale_desc '] != ' Reso ').' ]}
2018-11-23 16:48:30 +01:00
</ div >
2024-02-27 11:29:48 +01:00
</ div > ' ;
2020-07-08 08:45:55 +02:00
echo '
2024-02-27 14:54:33 +01:00
< div class = " row " >
< div class = " col-md-3 " >
{[ " type " : " number " , " label " : " '.tr('Peso').' " , " name " : " peso " , " value " : " $peso $ " , " readonly " : " '.intval(empty( $record['peso_manuale'] )).' " , " help " : " '.tr('Il valore del campo Peso viene calcolato in automatico sulla base degli articoli inseriti nel documento, a meno dell \ 'impostazione di un valore manuale in questo punto').' " ]}
< input type = " hidden " id = " peso_calcolato " name = " peso_calcolato " value = " '. $fattura->peso_calcolato .' " >
</ div >
2020-07-08 08:45:55 +02:00
2024-02-27 14:54:33 +01:00
< div class = " col-md-3 " >
{[ " type " : " checkbox " , " label " : " '.tr('Modifica peso').' " , " name " : " peso_manuale " , " value " : " $peso_manuale $ " , " help " : " '.tr('Seleziona per modificare manualmente il campo Peso').' " , " placeholder " : " '.tr('Modifica peso').' " ]}
</ div >
2020-07-08 08:45:55 +02:00
2024-02-27 14:54:33 +01:00
< div class = " col-md-3 " >
{[ " type " : " number " , " label " : " '.tr('Volume').' " , " name " : " volume " , " value " : " $volume $ " , " readonly " : " '.intval(empty( $record['volume_manuale'] )).' " , " help " : " '.tr('Il valore del campo Volume viene calcolato in automatico sulla base degli articoli inseriti nel documento, a meno dell \ 'impostazione di un valore manuale in questo punto').' " ]}
< input type = " hidden " id = " volume_calcolato " name = " volume_calcolato " value = " '. $fattura->volume_calcolato .' " >
</ div >
2020-07-08 08:45:55 +02:00
2024-02-27 14:54:33 +01:00
< div class = " col-md-3 " >
{[ " type " : " checkbox " , " label " : " '.tr('Modifica volume').' " , " name " : " volume_manuale " , " value " : " $volume_manuale $ " , " help " : " '.tr('Seleziona per modificare manualmente il campo Volume').' " , " placeholder " : " '.tr('Modifica volume').' " ]}
</ div >
2018-09-24 11:24:48 +02:00
</ div >
</ div >
</ div > ' ;
}
2017-08-04 16:28:16 +02:00
2020-08-03 12:08:52 +02:00
echo '
2022-03-07 12:47:58 +01:00
</ form > ' ;
2024-01-15 15:30:45 +01:00
// Dich. intento collegata
2023-08-04 14:54:28 +02:00
if ( $dir == 'entrata' && ! empty ( $fattura -> dichiarazione )) {
$ive_accettate = $dbo -> table ( 'co_iva' ) -> where ( 'codice_natura_fe' , 'N3.5' ) -> get ();
foreach ( $ive_accettate as $iva_accettata ) {
2024-03-20 11:13:28 +01:00
$descrizione_iva_accettata .= '<li>' . Aliquota :: find ( $iva_accettata -> id ) -> getTranslation ( 'name' ) . '</li>' ;
2022-03-25 16:44:48 +01:00
}
2023-08-04 14:54:28 +02:00
2024-03-20 11:13:28 +01:00
if ( $fattura -> stato -> getTranslation ( 'name' ) == 'Bozza' ) {
2022-03-25 16:44:48 +01:00
echo '
2024-02-27 14:54:33 +01:00
< div class = " alert alert-info " >
< i class = " fa fa-info " ></ i > '.tr("La fattura è collegata ad una dichiarazione d' intento con diponibilità residura pari a _MONEY_ . " , ['_MONEY_' => moneyFormat( $diff )]).'<br>'.tr('Per collegare una riga alla dichiarazione è sufficiente specificare come IVA <ul>_IVA_</ul>', ['_IVA_' => $descrizione_iva_accettata ]).'</b>
</ div > ' ;
2022-03-07 12:47:58 +01:00
}
}
echo '
2017-08-04 16:28:16 +02:00
<!-- RIGHE -->
< div class = " panel panel-primary " >
< div class = " panel-heading " >
2020-08-03 12:08:52 +02:00
< h3 class = " panel-title " > '.tr(' Righe ').' </ h3 >
2017-08-04 16:28:16 +02:00
</ div >
< div class = " panel-body " >
< div class = " row " >
2023-02-17 10:59:50 +01:00
< div class = " col-md-12 " > ' ;
2020-08-03 12:08:52 +02:00
2019-05-24 19:26:59 +02:00
if ( ! $block_edit ) {
2018-07-18 15:20:10 +02:00
if ( empty ( $record [ 'ref_documento' ])) {
2018-07-03 17:28:02 +02:00
if ( $dir == 'entrata' ) {
2023-02-06 17:42:18 +01:00
$where = '' ;
// Lettura interventi non collegati a preventivi, ordini e contratti
2023-05-23 11:05:31 +02:00
if ( ! setting ( 'Permetti fatturazione delle attività collegate a contratti' )) {
$where = ' AND in_interventi.id_contratto IS NULL' ;
}
if ( ! setting ( 'Permetti fatturazione delle attività collegate a ordini' )) {
$where .= ' AND in_interventi.id_ordine IS NULL' ;
}
if ( ! setting ( 'Permetti fatturazione delle attività collegate a preventivi' )) {
$where .= ' AND in_interventi.id_preventivo IS NULL' ;
2023-02-06 17:42:18 +01:00
}
// Lettura interventi non rifiutati, non fatturati
2024-02-28 15:28:39 +01:00
$int_query = 'SELECT COUNT(*) AS tot FROM `in_interventi` INNER JOIN `in_statiintervento` ON `in_interventi`.`idstatointervento`=`in_statiintervento`.`id` WHERE `idanagrafica`=' . prepare ( $record [ 'idanagrafica' ]) . ' AND `in_statiintervento`.`is_fatturabile`=1 AND `in_interventi`.`id` NOT IN (SELECT `idintervento` FROM `co_righe_documenti` WHERE `idintervento` IS NOT NULL) ' . $where ;
2018-02-09 14:25:40 +01:00
$interventi = $dbo -> fetchArray ( $int_query )[ 0 ][ 'tot' ];
2017-08-04 16:28:16 +02:00
2018-07-03 17:28:02 +02:00
// Se non trovo niente provo a vedere se ce ne sono per clienti terzi
if ( empty ( $interventi )) {
2023-02-06 17:42:18 +01:00
// Lettura interventi non rifiutati, non fatturati
2024-02-28 15:28:39 +01:00
$int_query = 'SELECT COUNT(*) AS tot FROM `in_interventi` INNER JOIN `in_statiintervento` ON `in_interventi`.`idstatointervento`=`in_statiintervento`.`id` WHERE `idclientefinale`=' . prepare ( $record [ 'idanagrafica' ]) . ' AND `in_statiintervento`.`is_fatturabile`=1 AND `in_interventi`.`id` NOT IN (SELECT `idintervento` FROM `co_righe_documenti` WHERE `idintervento` IS NOT NULL) ' . $where ;
2018-07-03 17:28:02 +02:00
$interventi = $dbo -> fetchArray ( $int_query )[ 0 ][ 'tot' ];
}
// Lettura preventivi accettati, in attesa di conferma o in lavorazione
2024-02-26 10:50:43 +01:00
$prev_query = ' SELECT
COUNT ( * ) AS tot
FROM
`co_preventivi`
LEFT JOIN `co_righe_preventivi` ON `co_preventivi` . id = `co_righe_preventivi` . idpreventivo
INNER JOIN `co_statipreventivi` ON `co_statipreventivi` . id = `co_preventivi` . idstato
WHERE
`idanagrafica` = '.prepare($record[' idanagrafica ']).' AND `co_statipreventivi` . `is_fatturabile` = 1 AND `default_revision` = 1 AND ( `co_righe_preventivi` . `qta` - `co_righe_preventivi` . `qta_evasa` ) > 0 ' ;
2018-07-03 17:28:02 +02:00
$preventivi = $dbo -> fetchArray ( $prev_query )[ 0 ][ 'tot' ];
2017-08-04 16:28:16 +02:00
2018-07-03 17:28:02 +02:00
// Lettura contratti accettati, in attesa di conferma o in lavorazione
2024-02-09 12:08:55 +01:00
$contr_query = 'SELECT COUNT(*) AS tot FROM `co_contratti` WHERE `idanagrafica`=' . prepare ( $record [ 'idanagrafica' ]) . ' AND `idstato` IN (SELECT `id` FROM `co_staticontratti` WHERE `is_fatturabile` = 1) AND `co_contratti`.`id` IN (SELECT `idcontratto` FROM `co_righe_contratti` WHERE `co_righe_contratti`.`idcontratto` = `co_contratti`.`id` AND (`qta` - `qta_evasa`) > 0)' ;
2018-07-03 17:28:02 +02:00
$contratti = $dbo -> fetchArray ( $contr_query )[ 0 ][ 'tot' ];
}
2018-06-26 10:25:50 +02:00
2020-04-27 11:55:07 +02:00
// Lettura ddt (entrata o uscita)
2024-02-27 11:10:40 +01:00
$ddt_query = ' SELECT
COUNT ( * ) AS tot
FROM
`dt_ddt`
2024-02-27 12:55:27 +01:00
INNER JOIN `dt_causalet` ON `dt_causalet` . `id` = `dt_ddt` . `idcausalet`
INNER JOIN `dt_statiddt` ON `dt_statiddt` . `id` = `dt_ddt` . `idstatoddt`
2024-03-22 15:52:24 +01:00
LEFT JOIN `dt_statiddt_lang` ON ( `dt_statiddt` . `id` = `dt_statiddt_lang` . `id_record` AND `dt_statiddt_lang` . `id_lang` = '.prepare(Models\Locale::getDefault()->id).' )
2020-07-14 13:30:25 +02:00
LEFT JOIN `dt_tipiddt` ON `dt_tipiddt` . `id` = `dt_ddt` . `idtipoddt`
2024-02-27 11:10:40 +01:00
INNER JOIN `dt_righe_ddt` ON `dt_righe_ddt` . `idddt` = `dt_ddt` . `id`
WHERE
`idanagrafica` = '.prepare($record[' idanagrafica ']).'
2024-02-27 12:55:27 +01:00
AND `dt_statiddt_lang` . `name` IN ( " Evaso " , " Parzialmente evaso " , " Parzialmente fatturato " )
2024-02-27 11:10:40 +01:00
AND `dt_tipiddt` . `dir` = '.prepare($dir).'
AND `dt_causalet` . `is_importabile` = 1
AND ( `dt_righe_ddt` . `qta` - `dt_righe_ddt` . `qta_evasa` ) > 0 ' ;
2018-07-28 18:02:17 +02:00
$ddt = $dbo -> fetchArray ( $ddt_query )[ 0 ][ 'tot' ];
2018-06-26 10:25:50 +02:00
2020-04-27 11:55:07 +02:00
// Lettura ordini (cliente o fornitore)
2024-03-01 11:32:13 +01:00
$ordini_query = ' SELECT
COUNT ( * ) AS tot
FROM
`or_ordini`
INNER JOIN `or_righe_ordini` ON `or_ordini` . `id` = `or_righe_ordini` . `idordine`
INNER JOIN `or_statiordine` ON `or_statiordine` . `id` = `or_ordini` . `idstatoordine`
2024-03-22 15:52:24 +01:00
LEFT JOIN `or_statiordine_lang` ON ( `or_statiordine` . `id` = `or_statiordine_lang` . `id_record` AND `or_statiordine_lang` . `id_lang` = '.prepare(Models\Locale::getDefault()->id).' )
2024-03-01 11:32:13 +01:00
INNER JOIN `or_tipiordine` ON `or_tipiordine` . `id` = `or_ordini` . `idtipoordine`
WHERE
idanagrafica = '.prepare($record[' idanagrafica ']).'
AND `name` IN ( \ ' Accettato\ ' , \ ' Evaso\ ' , \ ' Parzialmente evaso\ ' , \ ' Parzialmente fatturato\ ' ))
AND `dir` = '.prepare($dir).' )
AND ( `or_righe_ordini` . `qta` - `or_righe_ordini` . `qta_evasa` ) > 0 ' ;
2018-07-03 17:28:02 +02:00
$ordini = $dbo -> fetchArray ( $ordini_query )[ 0 ][ 'tot' ];
}
2017-08-04 16:28:16 +02:00
2023-08-04 14:54:28 +02:00
// Form di inserimento riga documento
echo '
2023-02-17 10:59:50 +01:00
< form id = " link_form " action = " " method = " post " >
< input type = " hidden " name = " op " value = " add_articolo " >
< input type = " hidden " name = " backto " value = " record-edit " >
2018-02-04 17:26:25 +01:00
2023-02-17 10:59:50 +01:00
< div class = " row " >
2023-05-24 17:15:29 +02:00
< div class = " col-md-3 " >
2023-02-17 10:59:50 +01:00
{[ " type " : " text " , " label " : " '.tr('Aggiungi un articolo tramite barcode').' " , " name " : " barcode " , " extra " : " autocomplete= \" off \" " , " icon-before " : " <i class= \" fa fa-barcode \" ></i> " , " required " : 0 ]}
</ div >
2019-03-29 12:46:17 +01:00
2023-02-17 10:59:50 +01:00
< div class = " col-md-4 " >
2024-03-20 11:13:28 +01:00
{[ " type " : " select " , " label " : " '.tr('Articolo').' " , " name " : " id_articolo " , " value " : " " , " ajax-source " : " articoli " , " select-options " : { " permetti_movimento_a_zero " : '.($dir == ' entrata ' ? 0 : 1).' , " idsede_partenza " : '.intval($fattura->idsede_partenza).' , " idsede_destinazione " : '.intval($fattura->idsede_destinazione).' , " idanagrafica " : '.$fattura->idanagrafica.' , " dir " : " '. $dir .' " , " idagente " : '.$fattura->idagente.' }, " icon-after " : " add|'.(new Module())->getByField('name', 'Articoli').' " ]}
2023-02-17 10:59:50 +01:00
</ div >
2017-08-04 16:28:16 +02:00
2023-05-24 17:15:29 +02:00
< div class = " col-md-3 " style = " margin-top: 25px " >
2023-02-17 10:59:50 +01:00
< button title = " '.tr('Aggiungi articolo alla vendita').' " class = " btn btn-primary tip " type = " button " onclick = " salvaArticolo() " >
< i class = " fa fa-plus " ></ i > '.tr(' Aggiungi ').'
</ button >
< a class = " btn btn-primary " onclick = " gestioneRiga(this) " data - title = " '.tr('Aggiungi riga').' " >
< i class = " fa fa-plus " ></ i > '.tr(' Riga ').'
</ a >
< div class = " btn-group tip " data - toggle = " tooltip " >
< button type = " button " class = " btn btn-primary dropdown-toggle " data - toggle = " dropdown " aria - haspopup = " true " aria - expanded = " true " >
< i class = " fa fa-list " ></ i > '.tr(' Altro ').'
< span class = " caret " ></ span >
</ button >
< ul class = " dropdown-menu dropdown-menu-right " >
< li >
< a style = " cursor:pointer " onclick = " gestioneDescrizione(this) " data - title = " '.tr('Aggiungi descrizione').' " >
< i class = " fa fa-plus " ></ i > '.tr(' Descrizione ').'
</ a >
</ li >
< li >
< a style = " cursor:pointer " onclick = " gestioneSconto(this) " data - title = " '.tr('Aggiungi sconto/maggiorazione').' " >
< i class = " fa fa-plus " ></ i > '.tr(' Sconto / maggiorazione ').'
</ a >
</ li > ' ;
2023-08-04 14:54:28 +02:00
if ( empty ( $record [ 'ref_documento' ])) {
if ( $dir == 'entrata' ) {
echo '
2023-02-17 10:59:50 +01:00
< li >
2023-03-30 16:36:24 +02:00
< a class = " '.(!empty( $interventi ) ? '' : ' disabled').' " style = " cursor:pointer " data - href = " '. $structure->fileurl ('add_intervento.php').'?id_module='. $id_module .'&id_record='. $id_record .' " data - toggle = " modal " data - title = " '.tr('Aggiungi Attività').' " onclick = " saveForm() " >
2023-02-17 10:59:50 +01:00
< i class = " fa fa-plus " ></ i > '.tr(' Attività ').'
</ a >
</ li >
< li >
2023-03-30 16:36:24 +02:00
< a class = " '.(!empty( $preventivi ) ? '' : ' disabled').' " style = " cursor:pointer " data - href = " '. $structure->fileurl ('add_preventivo.php').'?id_module='. $id_module .'&id_record='. $id_record .' " data - toggle = " modal " data - title = " '.tr('Aggiungi Preventivo').' " onclick = " saveForm() " >
2023-02-17 10:59:50 +01:00
< i class = " fa fa-plus " ></ i > '.tr(' Preventivo ').'
</ a >
</ li >
< li >
2023-03-30 16:36:24 +02:00
< a class = " '.(!empty( $contratti ) ? '' : ' disabled').' " style = " cursor:pointer " data - href = " '. $structure->fileurl ('add_contratto.php').'?id_module='. $id_module .'&id_record='. $id_record .' " data - toggle = " modal " data - title = " '.tr('Aggiungi Contratto').' " onclick = " saveForm() " >
2023-02-17 10:59:50 +01:00
< i class = " fa fa-plus " ></ i > '.tr(' Contratto ').'
</ a >
</ li > ' ;
2023-08-04 14:54:28 +02:00
}
echo '
2023-02-17 10:59:50 +01:00
< li >
2023-03-30 16:36:24 +02:00
< a class = " '.(!empty( $ddt ) ? '' : ' disabled').' " style = " cursor:pointer " data - href = " '. $structure->fileurl ('add_ddt.php').'?id_module='. $id_module .'&id_record='. $id_record .' " data - toggle = " modal " data - title = " '.tr('Aggiungi Ddt').' " onclick = " saveForm() " >
2023-02-17 10:59:50 +01:00
< i class = " fa fa-plus " ></ i > '.tr(' Ddt ').'
</ a >
</ li >
< li >
2023-03-30 16:36:24 +02:00
< a class = " '.(!empty( $ordini ) ? '' : ' disabled').' " style = " cursor:pointer " data - href = " '. $structure->fileurl ('add_ordine.php').'?id_module='. $id_module .'&id_record='. $id_record .' " data - toggle = " modal " data - title = " '.tr('Aggiungi Ordine').' " onclick = " saveForm() " >
2023-02-17 10:59:50 +01:00
< i class = " fa fa-plus " ></ i > '.tr(' Ordine ').'
</ a >
</ li > ' ;
2023-08-04 14:54:28 +02:00
}
echo '
2023-02-17 10:59:50 +01:00
</ ul >
</ div >
</ div >
2023-05-24 17:15:29 +02:00
< div class = " col-md-2 " >
{[ " type " : " select " , " label " : " '.tr('Ordinamento').' " , " name " : " ordinamento " , " class " : " no-search " , " value " : " '.( $_SESSION['module_'.$id_module] ['order_row_desc'] ? 'desc' : 'manuale').' " , " values " : " list= \" desc \" : \" '.tr('Ultima riga inserita').' \" , \" manuale \" : \" '.tr('Manuale').' \" " ]}
</ div >
2023-02-17 10:59:50 +01:00
</ div >
</ form > ' ;
2017-08-04 16:28:16 +02:00
}
?>
</ div >
</ div >
< div class = " clearfix " ></ div >
< br >
2020-09-14 10:49:23 +02:00
< div class = " row " >
< div class = " col-md-12 " id = " righe " ></ div >
2017-08-04 16:28:16 +02:00
</ div >
</ div >
</ div >
2019-03-15 12:16:20 +01:00
< ? php
2020-03-09 13:57:13 +01:00
2022-04-08 12:38:59 +02:00
if ( $fattura -> isFE ()) {
2019-03-15 12:16:20 +01:00
echo '
2022-04-08 16:54:31 +02:00
< div class = " alert alert-info text-center " id = " controlla_totali " ></ div >
2019-03-15 12:16:20 +01:00
< script >
2020-03-02 16:13:07 +01:00
$ ( document ) . ready ( function () {
2019-03-15 12:16:20 +01:00
$ . ajax ({
url : globals . rootdir + " /actions.php " ,
type : " post " ,
data : {
id_module : globals . id_module ,
id_record : globals . id_record ,
op : " controlla_totali " ,
},
success : function ( data ){
data = JSON . parse ( data );
2020-03-02 16:13:07 +01:00
2021-09-13 10:17:11 +02:00
const div = $ ( " #controlla_totali " );
2019-03-15 12:16:20 +01:00
div . removeClass ( " alert-info " );
2021-09-13 10:17:11 +02:00
const calculated = parseFloat ( data . calculated );
const stored = parseFloat ( data . stored );
2019-05-04 00:32:28 +02:00
2021-06-03 09:19:28 +02:00
if ( stored == null ) {
2019-03-15 15:54:29 +01:00
div . addClass ( " alert-info " ) . html ( " '.tr( " Il file XML non contiene il nodo '' ImportoTotaleDocumento '' : impossibile controllare corrispondenza dei totali " ).'. " )
2022-04-08 16:54:31 +02:00
} else if ( stored . toLocale () != calculated . toLocale ()){
2021-09-13 10:17:11 +02:00
div . addClass ( " alert-warning " ) . html ( " '.tr('Il totale del file XML non corrisponde a quello calcolato dal gestionale: previsto _XML_, calcolato _CALC_ (differenza _DIFF_)', [
2024-03-22 15:52:24 +01:00
'_XML_' => '" + stored.toLocale() + " " + globals.currency + "' ,
'_CALC_' => '" + calculated.toLocale() + " " + globals.currency + "' ,
'_DIFF_' => '" + (calculated - stored).toLocale() + " " + globals.currency + "' ,
]) . ' . " )
2019-03-15 12:16:20 +01:00
}
2020-03-02 16:13:07 +01:00
2019-03-15 12:16:20 +01:00
}
});
})
</ script > ' ;
}
?>
2022-01-13 11:56:12 +01:00
{( " name " : " filelist_and_upload " , " id_module " : " $id_module $ " , " id_record " : " $id_record $ " , " abilita_genera " : " <?php echo $abilita_genera ; ?> " )}
2017-08-04 16:28:16 +02:00
2019-01-11 15:57:46 +01:00
< ? php
2019-03-08 16:59:55 +01:00
if ( $dir == 'entrata' ) {
echo '
2019-07-12 16:08:15 +02:00
< div class = " alert alert-info text-center " > '.tr(' Per allegare un documento alla fattura elettronica caricare il file PDF specificando come categoria " Allegati Fattura Elettronica " ').' .</ div > ' ;
2019-03-08 16:59:55 +01:00
}
2019-01-11 15:57:46 +01:00
2019-03-08 16:59:55 +01:00
echo '
2017-08-04 16:28:16 +02:00
< script type = " text/javascript " >
2023-07-19 18:47:36 +02:00
$ ( " #idtipodocumento " ) . change ( function () {
updateSelectOption ( " idtipodocumento " , $ ( this ) . val ());
session_set ( " superselect,idtipodocumento " , $ ( this ) . val (), 0 );
});
2020-07-31 14:25:50 +02:00
$ ( " #idanagrafica " ) . change ( function () {
updateSelectOption ( " idanagrafica " , $ ( this ) . val ());
2019-09-13 12:27:29 +02:00
session_set ( " superselect,idanagrafica " , $ ( this ) . val (), 0 );
2020-03-02 16:13:07 +01:00
2022-03-08 14:59:03 +01:00
$ ( " #idreferente " ) . selectReset ();
2022-07-07 17:28:18 +02:00
$ ( " #id_dichiarazione_intento " ) . selectReset ();
$ ( " #idpagamento " ) . selectReset ();
$ ( " #id_banca_azienda " ) . selectReset ();
let data = $ ( this ) . selectData ();
if ( data ) {
// Impostazione del tipo di pagamento da anagrafica
if ( data . id_pagamento ) {
input ( " idpagamento " ) . getElement ()
. selectSetNew ( data . id_pagamento , data . desc_pagamento , { " id_banca_vendite " : data . id_banca_vendite , " id_banca_acquisti " : data . id_banca_acquisti , " descrizione_banca_vendite " : data . descrizione_banca_vendite , " descrizione_banca_acquisti " : data . descrizione_banca_acquisti });
}
} ' ;
2019-09-13 12:27:29 +02:00
2024-01-15 15:30:45 +01:00
if ( $dir == 'entrata' ) {
echo '$("#idsede_destinazione").selectReset();' ;
} else {
echo '$("#idsede_partenza").selectReset();' ;
}
2019-09-13 12:27:29 +02:00
2019-06-25 17:34:26 +02:00
echo '
2017-08-04 16:28:16 +02:00
});
2020-07-31 14:25:50 +02:00
$ ( " #ricalcola_scadenze " ) . click ( function () {
2019-03-08 16:59:55 +01:00
swal ({
title : " '.tr('Desideri ricalcolare le scadenze?').' " ,
type : " warning " ,
showCancelButton : true ,
confirmButtonText : " '.tr('Sì').' "
}) . then ( function ( result ) {
redirect ( globals . rootdir + " /editor.php " , {
id_module : globals . id_module ,
id_record : globals . id_record ,
op : " ricalcola_scadenze " ,
backto : " record-edit " ,
}, " post " )
})
});
</ script > ' ;
2018-07-04 12:57:53 +02:00
2018-07-10 16:01:28 +02:00
?>
2018-09-28 16:17:10 +02:00
{( " name " : " log_email " , " id_module " : " $id_module $ " , " id_record " : " $id_record $ " )}
2018-07-10 16:19:38 +02:00
2018-07-26 16:19:34 +02:00
< ? php
2019-06-20 16:44:45 +02:00
// Eliminazione ddt solo se ho accesso alla sede aziendale
2019-10-07 16:00:28 +02:00
$field_name = ( $dir == 'entrata' ) ? 'idsede_partenza' : 'idsede_destinazione' ;
2019-06-29 11:01:26 +02:00
if ( in_array ( $record [ $field_name ], $user -> sedi )) {
2023-07-05 11:50:27 +02:00
$disabilita_eliminazione = in_array ( $fattura -> codice_stato_fe , [ 'RC' , 'MC' , 'EC01' , 'WAIT' ]);
2021-09-17 11:00:36 +02:00
echo '
2023-09-28 16:08:45 +02:00
< a id = " elimina " class = " btn btn-danger ask '.( $disabilita_eliminazione ? 'disabled' : '').' " data - backto = " record-list " '.($disabilita_eliminazione ? ' disabled ' : ' ').' >
2021-09-17 11:00:36 +02:00
< i class = " fa fa-trash " ></ i > '.tr(' Elimina ').'
</ a > ' ;
2019-06-20 16:44:45 +02:00
}
2020-08-03 12:08:52 +02:00
echo '
2018-07-26 16:19:34 +02:00
< script >
2023-03-30 16:36:24 +02:00
async function saveForm () {
// Salvataggio via AJAX
await salvaForm ( " #edit-form " );
2020-08-03 12:08:52 +02:00
}
2018-07-26 17:34:12 +02:00
2020-08-03 12:08:52 +02:00
function gestioneSconto ( button ) {
gestioneRiga ( button , " is_sconto " );
}
2020-03-02 16:13:07 +01:00
2020-08-03 12:08:52 +02:00
function gestioneDescrizione ( button ) {
gestioneRiga ( button , " is_descrizione " );
}
2018-07-28 18:02:17 +02:00
2020-08-03 12:08:52 +02:00
async function gestioneRiga ( button , options ) {
// Salvataggio via AJAX
2021-03-29 18:31:23 +02:00
await salvaForm ( " #edit-form " , {}, button );
// Lettura titolo e chiusura tooltip
2023-02-17 10:59:50 +01:00
let title = $ ( button ) . attr ( " data-title " );
2020-03-02 16:13:07 +01:00
2020-08-03 12:08:52 +02:00
// Apertura modal
2021-03-29 18:31:23 +02:00
options = options ? options : " is_riga " ;
openModal ( title , " '. $structure->fileurl ('row-add.php').'?id_module='. $id_module .'&id_record='. $id_record .'& " + options );
2020-08-03 12:08:52 +02:00
}
2019-09-27 18:11:30 +02:00
2020-09-14 10:49:23 +02:00
/**
* Funzione dedicata al caricamento dinamico via AJAX delle righe del documento .
*/
2023-02-17 10:59:50 +01:00
function caricaRighe ( id_riga ) {
2020-09-14 10:49:23 +02:00
let container = $ ( " #righe " );
localLoading ( container , true );
2020-09-14 11:06:35 +02:00
return $ . get ( " '. $structure->fileurl ('row-list.php').'?id_module='. $id_module .'&id_record='. $id_record .' " , function ( data ) {
container . html ( data );
2020-09-14 10:49:23 +02:00
localLoading ( container , false );
});
}
2019-09-27 18:11:30 +02:00
$ ( document ) . ready ( function () {
2023-02-17 10:59:50 +01:00
caricaRighe ( null );
2020-09-14 10:49:23 +02:00
2019-09-27 18:11:30 +02:00
$ ( " #data_registrazione " ) . on ( " dp.change " , function ( e ) {
2020-09-14 10:49:23 +02:00
let data_competenza = $ ( " #data_competenza " );
2019-09-27 18:11:30 +02:00
2020-09-14 10:49:23 +02:00
if ( data_competenza . data ( " DateTimePicker " ) . date () < e . date ){
data_competenza . data ( " DateTimePicker " ) . date ( e . date );
2019-09-27 18:11:30 +02:00
}
2019-11-26 16:12:30 +01:00
});
$ ( " #data " ) . on ( " dp.change " , function ( e ) {
2020-09-14 10:49:23 +02:00
let data_competenza = $ ( " #data_competenza " );
2019-11-26 16:12:30 +01:00
data_competenza . data ( " DateTimePicker " ) . minDate ( e . date );
if ( data_competenza . data ( " DateTimePicker " ) . date () < e . date ){
data_competenza . data ( " DateTimePicker " ) . date ( e . date );
}
});
2023-01-13 09:35:27 +01:00
$ ( " #idsede_destinazione " ) . change ( function (){
updateSelectOption ( " idsede_destinazione " , $ ( this ) . val ());
$ ( " #idreferente " ) . selectReset ();
});
2023-02-17 10:59:50 +01:00
$ ( " #id_articolo " ) . on ( " change " , function ( e ) {
if ( $ ( this ) . val ()) {
var data = $ ( this ) . selectData ();
if ( data . barcode ) {
$ ( " #barcode " ) . val ( data . barcode );
} else {
$ ( " #barcode " ) . val ( " " );
}
}
e . preventDefault ();
setTimeout ( function (){
$ ( " #barcode " ) . focus ();
}, 100 );
});
$ ( " #barcode " ) . focus ();
2019-09-27 18:11:30 +02:00
});
2020-09-08 11:38:25 +02:00
function cambiaStato () {
let testo = $ ( " #idstatodocumento option:selected " ) . text ();
2020-09-08 11:45:52 +02:00
if ( testo === " Pagato " || testo === " Parzialmente pagato " ) {
2020-09-08 11:38:25 +02:00
if ( confirm ( " '.tr('Sicuro di voler impostare manualmente la fattura come pagata senza aggiungere il movimento in prima nota?').' " )) {
return true ;
} else {
$ ( " #idstatodocumento " ) . selectSet ( '.$record[' idstatodocumento '].' );
}
}
2020-12-02 11:31:52 +01:00
} ' ;
2020-12-04 15:40:47 +01:00
if ( $dir == 'entrata' ) {
2020-12-02 11:31:52 +01:00
echo '
function bolloAutomatico () {
let bollo_automatico = input ( " bollo_automatico " );
let addebita_bollo = input ( " addebita_bollo " );
if ( bollo_automatico . get () == 0 ){
$ ( " .bollo " ) . show ();
2021-02-23 11:34:37 +01:00
input ( " bollo " ) . enable ();
2023-11-27 16:30:49 +01:00
input ( " addebita_bollo " ) . enable ();
2020-12-02 11:31:52 +01:00
} else {
2023-11-27 16:30:49 +01:00
$ ( " .bollo " ) . hide ();
2020-12-02 11:31:52 +01:00
input ( " bollo " ) . disable ();
2020-12-04 15:40:47 +01:00
$ ( " #bollo " ) . val ( '.setting(' Importo marca da bollo ').' );
2023-11-27 16:30:49 +01:00
$ ( " addebita_bollo " ) . hide ();
input ( " addebita_bollo " ) . disable ();
2020-12-02 11:31:52 +01:00
}
}
$ ( document ) . ready ( function () {
2021-01-12 17:40:04 +01:00
if ( ! $ ( " #volume_manuale " ) . is ( " :checked " )){
input ( " volume " ) . set ( $ ( " #volume_calcolato " ) . val ());
}
$ ( " #volume_manuale " ) . click ( function () {
$ ( " #volume " ) . prop ( " readonly " , ! $ ( " #volume_manuale " ) . is ( " :checked " ));
if ( ! $ ( " #volume_manuale " ) . is ( " :checked " )){
input ( " volume " ) . set ( $ ( " #volume_calcolato " ) . val ());
}
});
if ( ! $ ( " #peso_manuale " ) . is ( " :checked " )){
input ( " peso " ) . set ( $ ( " #peso_calcolato " ) . val ());
}
$ ( " #peso_manuale " ) . click ( function () {
$ ( " #peso " ) . prop ( " readonly " , ! $ ( " #peso_manuale " ) . is ( " :checked " ));
if ( ! $ ( " #peso_manuale " ) . is ( " :checked " )){
input ( " peso " ) . set ( $ ( " #peso_calcolato " ) . val ());
}
});
2020-12-02 11:31:52 +01:00
bolloAutomatico ();
});
input ( " bollo_automatico " ) . change ( function () {
bolloAutomatico ();
}); ' ;
2020-09-08 11:38:25 +02:00
}
2023-02-17 10:59:50 +01:00
2020-12-02 11:31:52 +01:00
echo '
2023-03-30 16:36:24 +02:00
async function salvaArticolo () {
// Salvataggio via AJAX
await salvaForm ( " #edit-form " );
2023-02-17 10:59:50 +01:00
$ ( " #link_form " ) . ajaxSubmit ({
url : globals . rootdir + " /actions.php " ,
data : {
id_module : globals . id_module ,
id_record : globals . id_record ,
ajax : true ,
},
type : " post " ,
beforeSubmit : function ( arr , $form , options ) {
return $form . parsley () . validate ();
},
success : function ( response ){
renderMessages ();
if ( response . length > 0 ){
response = JSON . parse ( response );
swal ({
type : " error " ,
title : " '.tr('Errore').' " ,
text : response . error ,
});
}
$ ( " #barcode " ) . val ( " " );
$ ( " #id_articolo " ) . selectReset ();
2023-04-06 13:11:38 +02:00
content_was_modified = false ;
2023-02-17 10:59:50 +01:00
caricaRighe ( null );
}
});
}
2023-02-27 12:09:59 +01:00
$ ( " #link_form " ) . bind ( " keypress " , function ( e ) {
2023-02-17 10:59:50 +01:00
if ( e . keyCode == 13 ) {
e . preventDefault ();
salvaArticolo ();
return false ;
}
});
2023-05-24 17:15:29 +02:00
input ( " ordinamento " ) . on ( " change " , function (){
if ( input ( this ) . get () == " desc " ) {
session_set ( " module_'. $id_module .',order_row_desc " , 1 , " " ) . then ( function () {
caricaRighe ( null );
});
} else {
session_set ( " module_'. $id_module .',order_row_desc " ) . then ( function () {
caricaRighe ( null );
});
}
});
2024-03-19 16:41:11 +01:00
function risolviStato () {
$ . ajax ({
url : globals . rootdir + " /actions.php " ,
type : " POST " ,
dataType : " json " ,
data : {
id_module : globals . id_module ,
id_record : globals . id_record ,
op : " cambia_stato " ,
},
success : function ( response ) {
location . reload ();
},
error : function () {
location . reload ();
}
});
}
2018-07-26 16:19:34 +02:00
</ script > ' ;