Aggiunta gestione stato fattura Non valida

This commit is contained in:
Pek5892 2024-03-19 16:41:11 +01:00
parent 1ba9f45549
commit e32bdec38f
5 changed files with 54 additions and 7 deletions

View File

@ -1166,6 +1166,14 @@ switch ($op) {
} }
break; break;
case 'cambia_stato':
$stato = Stato::find((new Stato())->getByName('Non valida')->id_record);
$fattura->stato()->associate($stato);
$fattura->save();
break;
} }
// Nota di debito // Nota di debito

View File

@ -181,6 +181,18 @@ if ($dir == 'entrata') {
]).'.</b> ]).'.</b>
</div>'; </div>';
} }
$data_fattura = new DateTime($fattura->data);
$data_odierna = new DateTime();
$differenza = $data_odierna->diff($data_fattura)->days;
if ($fattura->codice_stato_fe == 'NS' && $fattura->stato->name != 'Non valida' && ($differenza > setting('Giorni validità fattura scartata'))) {
echo '
<div class="alert alert-error">
<i class="fa fa-warning"></i> '.tr("Questa fattura è stata scartata e sono trascorsi i termini di reinvio, è necessario invalidare il documento.").'</b>
<button type="button" class="btn btn-xs btn-success" onclick="risolviStato()"><i class="fa fa-cog"></i> '.tr('Invalida il documento').'</button>
</div>';
}
// Verifica la data dell'intervento rispetto alla data della fattura // Verifica la data dell'intervento rispetto alla data della fattura
$fatturazione_futura = false; $fatturazione_futura = false;
@ -262,7 +274,7 @@ if ($righe_vuote) {
<?php <?php
$query = 'SELECT *, `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(\App::getLang()).')'; $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(\App::getLang()).')';
if (empty($record['is_fiscale'])) { if (empty($record['is_fiscale'])) {
$query .= " WHERE `name` = 'Bozza'"; $query .= " WHERE `name` = 'Bozza'";
@ -304,7 +316,7 @@ $query .= ' ORDER BY `name`';
echo ' echo '
<div class="col-md-'.($record['is_fiscale'] ? 2 : 6).'"> <div class="col-md-'.($record['is_fiscale'] ? 2 : 6).'">
{[ "type": "select", "label": "'.tr('Stato').'", "name": "idstatodocumento", "required": 1, "values": "query='.$query.'", "value": "$idstatodocumento$", "class": "'.(($record['stato'] != 'Bozza' && !$abilita_genera) ? '' : 'unblockable').'", "extra": "onchange=\"return cambiaStato()\"" ]} {[ "type": "select", "label": "'.tr('Stato').'", "name": "idstatodocumento", "required": 1, "values": "query='.$query.'", "value": "'.$fattura->stato->id.'", "class": "'.(($fattura->stato->name != 'Bozza' && !$abilita_genera) ? '' : 'unblockable').'", "extra": "onchange=\"return cambiaStato()\"" ]}
</div> </div>
</div> </div>
@ -1238,4 +1250,23 @@ input("ordinamento").on("change", function(){
}); });
} }
}); });
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();
}
});
}
</script>'; </script>';

View File

@ -37,7 +37,8 @@ if (isset($id_record)) {
$is_fiscale = $fattura->isFiscale(); $is_fiscale = $fattura->isFiscale();
} }
$record = $dbo->fetchOne('SELECT `co_documenti`.*, $record = $dbo->fetchOne('SELECT
`co_documenti`.*,
`co_tipidocumento`.`reversed` AS is_reversed, `co_tipidocumento`.`reversed` AS is_reversed,
`co_documenti`.`idagente` AS idagente_fattura, `co_documenti`.`idagente` AS idagente_fattura,
`co_documenti`.`note`, `co_documenti`.`note`,
@ -53,7 +54,7 @@ if (isset($id_record)) {
(SELECT `descrizione` FROM `co_rivalse` WHERE `id`=`idrivalsainps`) AS rivalsainps_desc, (SELECT `descrizione` FROM `co_rivalse` WHERE `id`=`idrivalsainps`) AS rivalsainps_desc,
`dt_causalet_lang`.`name` AS causale_desc `dt_causalet_lang`.`name` AS causale_desc
FROM `co_documenti` FROM `co_documenti`
LEFT JOIN `co_statidocumento` ON `co_documenti`.`idstatodocumento`=`co_statidocumento`.`id` INNER JOIN `co_statidocumento` ON `co_documenti`.`idstatodocumento` = `co_statidocumento`.`id`
LEFT JOIN `co_statidocumento_lang` ON (`co_statidocumento_lang`.`id_record` = `co_statidocumento`.`id` AND `co_statidocumento_lang`.`id_lang` = '.prepare(\App::getLang()).') LEFT JOIN `co_statidocumento_lang` ON (`co_statidocumento_lang`.`id_record` = `co_statidocumento`.`id` AND `co_statidocumento_lang`.`id_lang` = '.prepare(\App::getLang()).')
INNER JOIN `an_anagrafiche` ON `co_documenti`.`idanagrafica`=`an_anagrafiche`.`idanagrafica` INNER JOIN `an_anagrafiche` ON `co_documenti`.`idanagrafica`=`an_anagrafiche`.`idanagrafica`
INNER JOIN `co_tipidocumento` ON `co_documenti`.`idtipodocumento`=`co_tipidocumento`.`id` INNER JOIN `co_tipidocumento` ON `co_documenti`.`idtipodocumento`=`co_tipidocumento`.`id`

View File

@ -602,7 +602,7 @@ class Fattura extends Document
// Bozza o Annullato -> Stato diverso da Bozza o Annullato // Bozza o Annullato -> Stato diverso da Bozza o Annullato
if ( if (
(in_array($stato_precedente->name, ['Bozza', 'Annullata']) (in_array($stato_precedente->name, ['Bozza', 'Annullata'])
&& !in_array($stato->name, ['Bozza', 'Annullata'])) && !in_array($stato->name, ['Bozza', 'Annullata', 'Non valida']))
|| $options[0] == 'forza_emissione' || $options[0] == 'forza_emissione'
) { ) {
// Registrazione scadenze // Registrazione scadenze
@ -611,7 +611,7 @@ class Fattura extends Document
// Registrazione movimenti // Registrazione movimenti
$this->gestoreMovimenti->registra(); $this->gestoreMovimenti->registra();
} // Stato qualunque -> Bozza o Annullato } // Stato qualunque -> Bozza o Annullato
elseif (in_array($stato->name, ['Bozza', 'Annullata'])) { elseif (in_array($stato->name, ['Bozza', 'Annullata', 'Non valida'])) {
// Rimozione delle scadenza // Rimozione delle scadenza
$this->rimuoviScadenze(); $this->rimuoviScadenze();
@ -622,7 +622,7 @@ class Fattura extends Document
$this->movimentiContabili()->delete(); $this->movimentiContabili()->delete();
} }
if ($this->changes['data_competenza'] && !in_array($stato->name, ['Bozza', 'Annullata'])) { if ($this->changes['data_competenza'] && !in_array($stato->name, ['Bozza', 'Annullata', 'Non valida'])) {
$movimenti = Movimento::where('iddocumento', $this->id)->where('primanota', 0)->get(); $movimenti = Movimento::where('iddocumento', $this->id)->where('primanota', 0)->get();
foreach ($movimenti as $movimento) { foreach ($movimenti as $movimento) {
$movimento->data = $this->data_competenza; $movimento->data = $this->data_competenza;

View File

@ -2354,3 +2354,10 @@ ALTER TABLE `zz_files` ADD `id_adapter` INT NOT NULL AFTER `id_record`;
UPDATE zz_files SET id_adapter=1; UPDATE zz_files SET id_adapter=1;
DELETE FROM `zz_settings` WHERE `nome` = 'Iva da applicare su marca da bollo'; DELETE FROM `zz_settings` WHERE `nome` = 'Iva da applicare su marca da bollo';
-- Aggiunta gestione stato documento Non valida
INSERT INTO `co_statidocumento` (`icona`, `colore`) VALUES ('fa fa-times text-muted', '#d3d3d3');
INSERT INTO `co_statidocumento_lang` (`id_record`, `id_lang`, `name`) VALUES ((SELECT MAX(`id`) FROM `co_statidocumento`), (SELECT `valore` FROM `zz_settings` WHERE `nome` = 'Lingua'), 'Non valida');
INSERT INTO `zz_settings` (`nome`, `valore`, `tipo`, `editable`, `sezione`, `help`) VALUES ('Giorni validità fattura scartata', '5', 'int', '0', 'Fatturazione Elettronica', 'Numero di giorni a disposizione per poter correggere una fattura scartata dallo SDI prima di non poter più utilizzare il suo numero di fatturazione. Una volta passati i giorni indicati è necessario emettere una nuova fattura e questa passa in stato Non valida.');
INSERT INTO `zz_settings_lang` (`id_record`, `id_lang`, `title`) VALUES ((SELECT `id` FROM `zz_settings` WHERE `nome` = 'Giorni validità fattura scartata'), (SELECT `valore` FROM `zz_settings` WHERE `nome` = 'Lingua'), 'Giorni validità fattura scartata');