';
+}
+
// Ricordo che si sta emettendo una fattura conto terzi
if ($dir == 'entrata' && $fattura->stato->descrizione == 'Bozza' ) {
if ($fattura->is_fattura_conto_terzi){
@@ -96,7 +135,6 @@ if ($dir == 'entrata' && $fattura->stato->descrizione == 'Bozza' ) {
';
}
-
}
// Verifica aggiuntive sulla sequenzialità dei numeri
if ($dir == 'entrata') {
diff --git a/modules/fatture/init.php b/modules/fatture/init.php
index 67b497cb4..55dacb209 100755
--- a/modules/fatture/init.php
+++ b/modules/fatture/init.php
@@ -63,4 +63,23 @@ if (isset($id_record)) {
// Blocco gestito dallo stato della Fattura Elettronica
$stato_fe = $database->fetchOne('SELECT * FROM fe_stati_documento WHERE codice = '.prepare($fattura->codice_stato_fe));
$abilita_genera = empty($fattura->codice_stato_fe) || intval($stato_fe['is_generabile']);
+
+ // Controllo autofattura e gestione avvisi
+ $reverse_charge = null;
+ $abilita_autofattura = null;
+ $autofattura_vendita = null;
+ $fattura_acquisto_originale = null;
+
+ if (!empty($fattura)) {
+ $reverse_charge = $fattura->getRighe()->first(function ($item, $key) {
+ return $item->aliquota != null && substr($item->aliquota->codice_natura_fe, 0, 2) == 'N6';
+ })->id;
+ $autofattura_vendita = Fattura::find($fattura->id_autofattura);
+ if (empty($autofattura_vendita) && !empty($fattura->progressivo_invio)) {
+ $autofattura_collegata = Fattura::where('progressivo_invio', '=', $fattura->progressivo_invio)->where('id', '!=', $fattura->id)->first();
+ }
+ $abilita_autofattura = ($fattura->anagrafica->nazione->iso2 != 'IT' || $reverse_charge) && $dir == 'uscita' && $fattura->id_autofattura == null && empty($autofattura_collegata);
+
+ $fattura_acquisto_originale = Fattura::where('id_autofattura', '=', $fattura->id)->first();
+ }
}
diff --git a/modules/fatture/src/Fattura.php b/modules/fatture/src/Fattura.php
index 79238d3fd..c0b04fd05 100755
--- a/modules/fatture/src/Fattura.php
+++ b/modules/fatture/src/Fattura.php
@@ -747,6 +747,17 @@ class Fattura extends Document
return $this->tipo->reversed == 1;
}
+ /**
+ * Controlla se la fattura è una nota di credito.
+ *
+ * @return bool
+ */
+ public function isAutofattura()
+ {
+ return in_array($this->tipo->codice_tipo_documento_fe, ['TD16','TD17','TD18','TD19',
+ 'TD20']);
+ }
+
/**
* Controlla se la fattura è fiscale.
*
diff --git a/plugins/importFE/actions.php b/plugins/importFE/actions.php
index 653479cac..40f569ed1 100755
--- a/plugins/importFE/actions.php
+++ b/plugins/importFE/actions.php
@@ -143,6 +143,14 @@ switch (filter('op')) {
$fattura_pa->delete();
$fattura = Fattura::find($id_fattura);
+ if ($fattura->isAutofattura()) {
+ $autofattura_collegata = Fattura::where('progressivo_invio', '=', $fattura->progressivo_invio)->where('id', '!=', $fattura->id)->first();
+ if (!empty($autofattura_collegata)) {
+ $fattura->registraScadenze(true);
+ $autofattura_collegata->registraScadenze(true);
+ }
+ }
+
// Aggiorno la tipologia di anagrafica fornitore
$anagrafica = $database->fetchOne('SELECT idanagrafica FROM co_documenti WHERE co_documenti.id='.prepare($id_fattura));
$rs_t = $database->fetchOne("SELECT * FROM an_tipianagrafiche_anagrafiche WHERE idtipoanagrafica=(SELECT an_tipianagrafiche.idtipoanagrafica FROM an_tipianagrafiche WHERE an_tipianagrafiche.descrizione='Fornitore') AND idanagrafica=".prepare($anagrafica['idanagrafica']));
diff --git a/plugins/importFE/generate.php b/plugins/importFE/generate.php
index e3b295825..939e3bcf3 100755
--- a/plugins/importFE/generate.php
+++ b/plugins/importFE/generate.php
@@ -124,6 +124,11 @@ if (isset($fattura_body['DatiPagamento'])) {
$pagamenti = isset($pagamenti[0]) ? $pagamenti : [$pagamenti];
}
+$is_autofattura = false;
+if (in_array($dati_generali['TipoDocumento'], ['TD16', 'TD17', 'TD18', 'TD19', 'TD20'])) {
+ $is_autofattura = true;
+}
+
// Individuazione metodo di pagamento di base
$metodi = isset($pagamenti[0]['DettaglioPagamento']) ? $pagamenti[0]['DettaglioPagamento'] : [];
$metodi = isset($metodi[0]) ? $metodi : [$metodi];
@@ -219,9 +224,11 @@ echo '
';
// Sezionale
+$id_segment = $is_autofattura ? setting('Sezionale per autofatture di acquisto') : $_SESSION['module_'.$id_module]['id_segment'];
+
echo '
- {[ "type": "select", "label": "'.tr('Sezionale').'", "name": "id_segment", "required": 1, "values": "query=SELECT id, name AS descrizione FROM zz_segments WHERE is_fiscale = 1 AND id_module='.$id_module.' ORDER BY name", "value": "'.$_SESSION['module_'.$id_module]['id_segment'].'" ]}
+ {[ "type": "select", "label": "'.tr('Sezionale').'", "name": "id_segment", "required": 1, "values": "query=SELECT id, name AS descrizione FROM zz_segments WHERE is_fiscale = 1 AND id_module='.$id_module.' ORDER BY name", "value": "'.$id_segment.'" ]}
';
// Data di registrazione
@@ -400,6 +407,7 @@ if (!empty($righe)) {
$idconto_acquisto = $database->fetchOne('SELECT idconto_acquisto FROM mg_articoli WHERE id = '.prepare($id_articolo))['idconto_acquisto'];
}
+ $idconto_acquisto = $is_autofattura ? setting('Conto per autofattura') : $idconto_acquisto;
$qta = $riga['Quantita'];
$um = $riga['UnitaMisura'];
$prezzo_unitario = $riga['PrezzoUnitario'] ?: $riga['Importo'];