From 5be7d7566e5a73e41e9f24965d0eda665c03574c Mon Sep 17 00:00:00 2001 From: Thomas Zilio Date: Mon, 2 Mar 2020 16:13:07 +0100 Subject: [PATCH] Miglioramento informativa numerazioni Aggiunto controllo su numerazioni di Fatture di acquisto e DDT in entrata, miglioramento delle informazioni sulla numerazione delle Fatture di vendita. --- modules/contratti/bulk.php | 2 +- modules/ddt/actions.php | 19 ++-- modules/fatture/actions.php | 198 +++++++++++++++++++----------------- modules/fatture/edit.php | 82 ++++++++------- modules/fatture/modutil.php | 47 +++++++++ modules/preventivi/bulk.php | 2 +- 6 files changed, 213 insertions(+), 137 deletions(-) diff --git a/modules/contratti/bulk.php b/modules/contratti/bulk.php index d39b8eddf..9f7a9a603 100755 --- a/modules/contratti/bulk.php +++ b/modules/contratti/bulk.php @@ -38,7 +38,7 @@ switch (post('op')) { $anagrafica = $documento_import->anagrafica; $id_anagrafica = $anagrafica->id; - if(!$documento_import->stato->is_pianificabile){ + if (!$documento_import->stato->is_pianificabile) { break; } diff --git a/modules/ddt/actions.php b/modules/ddt/actions.php index 204332bb6..2fb41506d 100755 --- a/modules/ddt/actions.php +++ b/modules/ddt/actions.php @@ -115,14 +115,17 @@ switch (post('op')) { aggiorna_sedi_movimenti('ddt', $id_record); // Controllo sulla presenza di DDT con lo stesso numero secondario - $count = DDT::where('numero_esterno', $numero_esterno) - ->where('id', '!=', $id_record) - ->where('idanagrafica', '=', $id_anagrafica) - ->whereHas('tipo', function ($query) use ($dir) { - $query->where('dt_tipiddt.dir', '=', $dir); - })->count(); - if (!empty($count)) { - flash()->warning(tr('Esiste già un DDT con lo stesso numero secondario e la stessa anagrafica collegata!')); + $direzione = $ddt->direzione; + if ($direzione == 'uscita') { + $count = DDT::where('numero_esterno', $numero_esterno) + ->where('id', '!=', $id_record) + ->where('idanagrafica', '=', $id_anagrafica) + ->whereHas('tipo', function ($query) use ($direzione) { + $query->where('dir', '=', $direzione); + })->count(); + if (!empty($count)) { + flash()->warning(tr('Esiste già un DDT con lo stesso numero secondario e la stessa anagrafica collegata!')); + } } flash()->info(tr('Ddt modificato correttamente!')); diff --git a/modules/fatture/actions.php b/modules/fatture/actions.php index 40a98968f..e1129cf97 100755 --- a/modules/fatture/actions.php +++ b/modules/fatture/actions.php @@ -41,124 +41,138 @@ switch (post('op')) { break; case 'update': - if (post('id_record') !== null) { - $stato_precedente = $fattura->stato; + $stato_precedente = $fattura->stato; - $stato = Stato::find(post('idstatodocumento')); - $fattura->stato()->associate($stato); + $stato = Stato::find(post('idstatodocumento')); + $fattura->stato()->associate($stato); - $tipo = Tipo::find(post('idtipodocumento')); - $fattura->tipo()->associate($tipo); + $tipo = Tipo::find(post('idtipodocumento')); + $fattura->tipo()->associate($tipo); - $fattura->data = post('data'); + $fattura->data = post('data'); - if ($dir == 'entrata') { - $fattura->data_registrazione = post('data'); - } else { - $fattura->data_registrazione = post('data_registrazione'); - } + if ($dir == 'entrata') { + $fattura->data_registrazione = post('data'); + } else { + $fattura->data_registrazione = post('data_registrazione'); + } - $fattura->data_competenza = post('data_competenza'); + $fattura->data_competenza = post('data_competenza'); + $fattura->numero_esterno = post('numero_esterno'); + $fattura->note = post('note'); + $fattura->note_aggiuntive = post('note_aggiuntive'); + + $fattura->idanagrafica = post('idanagrafica'); + $fattura->idagente = post('idagente'); + $fattura->idpagamento = post('idpagamento'); + $fattura->idbanca = post('idbanca'); + $fattura->idcausalet = post('idcausalet'); + $fattura->idspedizione = post('idspedizione'); + $fattura->idporto = post('idporto'); + $fattura->idaspettobeni = post('idaspettobeni'); + $fattura->idvettore = post('idvettore'); + $fattura->idsede_partenza = post('idsede_partenza'); + $fattura->idsede_destinazione = post('idsede_destinazione'); + $fattura->idconto = post('idconto'); + $fattura->split_payment = post('split_payment') ?: 0; + $fattura->is_fattura_conto_terzi = post('is_fattura_conto_terzi') ?: 0; + $fattura->n_colli = post('n_colli'); + $fattura->tipo_resa = post('tipo_resa'); + + $fattura->rivalsainps = 0; + $fattura->ritenutaacconto = 0; + $fattura->iva_rivalsainps = 0; + $fattura->id_ritenuta_contributi = post('id_ritenuta_contributi') ?: null; + + $fattura->codice_stato_fe = post('codice_stato_fe') ?: null; + + // Informazioni per le fatture di acquisto + if ($dir == 'uscita') { + $fattura->numero = post('numero'); $fattura->numero_esterno = post('numero_esterno'); - $fattura->note = post('note'); - $fattura->note_aggiuntive = post('note_aggiuntive'); + $fattura->idrivalsainps = post('id_rivalsa_inps'); + $fattura->idritenutaacconto = post('id_ritenuta_acconto'); + } - $fattura->idanagrafica = post('idanagrafica'); - $fattura->idagente = post('idagente'); - $fattura->idpagamento = post('idpagamento'); - $fattura->idbanca = post('idbanca'); - $fattura->idcausalet = post('idcausalet'); - $fattura->idspedizione = post('idspedizione'); - $fattura->idporto = post('idporto'); - $fattura->idaspettobeni = post('idaspettobeni'); - $fattura->idvettore = post('idvettore'); - $fattura->idsede_partenza = post('idsede_partenza'); - $fattura->idsede_destinazione = post('idsede_destinazione'); - $fattura->idconto = post('idconto'); - $fattura->split_payment = post('split_payment') ?: 0; - $fattura->is_fattura_conto_terzi = post('is_fattura_conto_terzi') ?: 0; - $fattura->n_colli = post('n_colli'); - $fattura->tipo_resa = post('tipo_resa'); + // Operazioni sul bollo + $fattura->addebita_bollo = post('addebita_bollo'); + $bollo_automatico = post('bollo_automatico'); + if (empty($bollo_automatico)) { + $fattura->bollo = post('bollo'); + } else { + $fattura->bollo = null; + } - $fattura->rivalsainps = 0; - $fattura->ritenutaacconto = 0; - $fattura->iva_rivalsainps = 0; - $fattura->id_ritenuta_contributi = post('id_ritenuta_contributi') ?: null; + // Operazioni sulla dichiarazione d'intento + $dichiarazione_precedente = $fattura->dichiarazione; + $fattura->id_dichiarazione_intento = post('id_dichiarazione_intento') ?: null; - $fattura->codice_stato_fe = post('codice_stato_fe') ?: null; + $fattura->save(); - // Informazioni per le fatture di acquisto - if ($dir == 'uscita') { - $fattura->numero = post('numero'); - $fattura->numero_esterno = post('numero_esterno'); - $fattura->idrivalsainps = post('id_rivalsa_inps'); - $fattura->idritenutaacconto = post('id_ritenuta_acconto'); - } + if ($fattura->direzione == 'entrata' && $stato_precedente->descrizione == 'Bozza' && $stato['descrizione'] == 'Emessa') { + // Generazione automatica della Fattura Elettronica + $stato_fe = empty($fattura->codice_stato_fe) || in_array($fattura->codice_stato_fe, ['GEN', 'NS', 'EC02']); + $checks = FatturaElettronica::controllaFattura($fattura); + if ($stato_fe && empty($checks)) { + try { + $fattura_pa = new FatturaElettronica($id_record); + $file = $fattura_pa->save(DOCROOT.'/'.FatturaElettronica::getDirectory()); - // Operazioni sul bollo - $fattura->addebita_bollo = post('addebita_bollo'); - $bollo_automatico = post('bollo_automatico'); - if (empty($bollo_automatico)) { - $fattura->bollo = post('bollo'); - } else { - $fattura->bollo = null; - } + flash()->info(tr('Fattura elettronica generata correttamente!')); - // Operazioni sulla dichiarazione d'intento - $dichiarazione_precedente = $fattura->dichiarazione; - $fattura->id_dichiarazione_intento = post('id_dichiarazione_intento') ?: null; + if (!$fattura_pa->isValid()) { + $errors = $fattura_pa->getErrors(); - $fattura->save(); - - if ($fattura->direzione == 'entrata' && $stato_precedente->descrizione == 'Bozza' && $stato['descrizione'] == 'Emessa') { - // Generazione automatica della Fattura Elettronica - $stato_fe = empty($fattura->codice_stato_fe) || in_array($fattura->codice_stato_fe, ['GEN', 'NS', 'EC02']); - $checks = FatturaElettronica::controllaFattura($fattura); - if ($stato_fe && empty($checks)) { - try { - $fattura_pa = new FatturaElettronica($id_record); - $file = $fattura_pa->save(DOCROOT.'/'.FatturaElettronica::getDirectory()); - - flash()->info(tr('Fattura elettronica generata correttamente!')); - - if (!$fattura_pa->isValid()) { - $errors = $fattura_pa->getErrors(); - - flash()->warning(tr('La fattura elettronica potrebbe avere delle irregolarità!').' '.tr('Controllare i seguenti campi: _LIST_', [ - '_LIST_' => implode(', ', $errors), - ]).'.'); - } - } catch (UnexpectedValueException $e) { + flash()->warning(tr('La fattura elettronica potrebbe avere delle irregolarità!').' '.tr('Controllare i seguenti campi: _LIST_', [ + '_LIST_' => implode(', ', $errors), + ]).'.'); } - } elseif (!empty($checks)) { - $message = tr('La fattura elettronica non è stata generata a causa di alcune informazioni mancanti').':'; + } catch (UnexpectedValueException $e) { + } + } elseif (!empty($checks)) { + $message = tr('La fattura elettronica non è stata generata a causa di alcune informazioni mancanti').':'; - foreach ($checks as $check) { - $message .= ' + foreach ($checks as $check) { + $message .= '

'.$check['name'].' '.$check['link'].'

'; } - flash()->warning($message); + $message .= ' +'; } + + flash()->warning($message); } - - aggiorna_sedi_movimenti('documenti', $id_record); - - flash()->info(tr('Fattura modificata correttamente!')); } + aggiorna_sedi_movimenti('documenti', $id_record); + + // Controllo sulla presenza di fattura di acquisto con lo stesso numero secondario nello stesso periodo + $direzione = $fattura->direzione; + if ($direzione == 'uscita') { + $count = Fattura::where('numero_esterno', $fattura->numero_esterno) + ->where('id', '!=', $id_record) + ->where('idanagrafica', '=', $fattura->anagrafica->id) + ->where('data', '>=', $_SESSION['period_start']) + ->where('data', '<=', $_SESSION['period_end']) + ->whereHas('tipo', function ($query) use ($direzione) { + $query->where('dir', '=', $direzione); + })->count(); + if (!empty($count)) { + flash()->warning(tr('Esiste già una fattura con lo stesso numero secondario e la stessa anagrafica collegata!')); + } + } + + flash()->info(tr('Fattura modificata correttamente!')); + break; // Ricalcolo scadenze diff --git a/modules/fatture/edit.php b/modules/fatture/edit.php index acb0bd4bd..beefedb04 100755 --- a/modules/fatture/edit.php +++ b/modules/fatture/edit.php @@ -35,31 +35,43 @@ if ($dir == 'entrata' && !empty($fattura->dichiarazione) && $fattura->stato->des if ($diff > 0) { echo ' -
- '.tr("La fattura è collegata a una dichiarazione d'intento con diponibilità di _MONEY_: per collegare una riga alla dichiarazione è sufficiente inserire come IVA _IVA_", [ - '_MONEY_' => moneyFormat(abs($diff)), - '_IVA_' => '"'.$iva->descrizione.'"', - ]).' -
'; +
+ '.tr("La fattura è collegata a una dichiarazione d'intento con diponibilità di _MONEY_: per collegare una riga alla dichiarazione è sufficiente inserire come IVA _IVA_", [ + '_MONEY_' => moneyFormat(abs($diff)), + '_IVA_' => '"'.$iva->descrizione.'"', + ]).'. +
'; } elseif ($diff == 0) { echo ' -
- '.tr("La dichiarazione d'intento ha raggiunto il massimale previsto di _MONEY_: le nuove righe della fattura devono presentare IVA diversa da _IVA_", [ - '_MONEY_' => moneyFormat(abs($fattura->dichiarazione->massimale)), - '_IVA_' => '"'.$iva->descrizione.'"', - ]).' -
'; +
+ '.tr("La dichiarazione d'intento ha raggiunto il massimale previsto di _MONEY_: le nuove righe della fattura devono presentare IVA diversa da _IVA_", [ + '_MONEY_' => moneyFormat(abs($fattura->dichiarazione->massimale)), + '_IVA_' => '"'.$iva->descrizione.'"', + ]).'. +
'; } else { echo ' -
- '.tr("La dichiarazione d'intento ha superato il massimale previsto di _MONEY_: per rimuovere righe della fattura dalla dichiarazione è sufficiente modificare l'IVA in qualcosa di diverso da _IVA_", [ - '_MONEY_' => moneyFormat(abs($diff)), - '_IVA_' => '"'.$iva->descrizione.'"', - ]).' -
'; +
+ '.tr("La dichiarazione d'intento ha superato il massimale previsto di _MONEY_: per rimuovere righe della fattura dalla dichiarazione è sufficiente modificare l'IVA in qualcosa di diverso da _IVA_", [ + '_MONEY_' => moneyFormat(abs($diff)), + '_IVA_' => '"'.$iva->descrizione.'"', + ]).'. +
'; } } +if ($dir == 'entrata') { + $numero_previsto = verifica_numero($fattura); + if (!empty($numero_previsto)) { + echo ' +
+ '.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.'"', + ]).'. +
'; + } +} ?>
@@ -196,14 +208,14 @@ if (empty($record['is_fiscale'])) { - - + +
{[ "type": "select", "label": "", "name": "idagente", "ajax-source": "agenti", "value": "$idagente_fattura$" ]}
- +
- + @@ -229,7 +241,7 @@ if (empty($record['is_fiscale'])) { } else { ?>
- + @@ -237,7 +249,7 @@ if (empty($record['is_fiscale'])) {
- + @@ -384,11 +396,11 @@ echo ' '_MONEY_' => moneyFormat(setting("Soglia minima per l'applicazione della marca da bollo")), ]).'.", "placeholder": "'.tr('Bollo automatico').'" ]}
- +
{[ "type": "number", "label": "'.tr('Importo marca da bollo').'", "name": "bollo", "value": "$bollo$", "disabled": '.intval(!isset($record['bollo'])).' ]}
- +