From 0b478233fa0297eca43bb8639caefe57d91280d2 Mon Sep 17 00:00:00 2001 From: Beppe Date: Mon, 21 Feb 2022 18:49:31 +0100 Subject: [PATCH] Verifica numerazione DDT --- modules/ddt/edit.php | 11 +++++++++++ modules/ddt/modutil.php | 43 +++++++++++++++++++++++++++++++++++++++++ 2 files changed, 54 insertions(+) diff --git a/modules/ddt/edit.php b/modules/ddt/edit.php index 3dfe4e361..cafe66470 100755 --- a/modules/ddt/edit.php +++ b/modules/ddt/edit.php @@ -29,6 +29,17 @@ if ($module['name'] == 'Ddt di vendita') { $dir = 'uscita'; } +$numero_previsto = verifica_numero_ddt($ddt); +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.'"', + ]).'. +
'; +} + ?>
diff --git a/modules/ddt/modutil.php b/modules/ddt/modutil.php index 6cc01107d..eacc4aa7d 100644 --- a/modules/ddt/modutil.php +++ b/modules/ddt/modutil.php @@ -20,6 +20,7 @@ include_once __DIR__.'/../../core.php'; use Modules\DDT\DDT; +use Util\Generator; /** * Funzione per generare un nuovo numero per il ddt. @@ -213,3 +214,45 @@ function get_stato_ddt($idddt) } } } + +function verifica_numero_ddt(DDT $ddt) +{ + global $dbo; + + if (empty($ddt->numero_esterno)) { + return null; + } + + $data = $ddt->data; + $tipo = $ddt->tipo; + + $documenti = DDT::where('idtipoddt', $tipo->id) + ->where('data', $data) + ->get(); + + // Recupero maschera per questo segmento + $maschera = setting('Formato numero secondario ddt'); + + $ultimo = Generator::getPreviousFrom($maschera, 'dt_ddt', 'numero_esterno', [ + 'data < '.prepare(date('Y-m-d', strtotime($data))), + 'YEAR(data) = '.prepare(date('Y', strtotime($data))), + 'idtipoddt = '.prepare($tipo->id), + ], $data); + + do { + $numero = Generator::generate($maschera, $ultimo, 1, Generator::dateToPattern($data)); + + $filtered = $documenti->reject(function ($item, $key) use ($numero) { + return $item->numero_esterno == $numero; + }); + + if ($documenti->count() == $filtered->count()) { + return $numero; + } + + $documenti = $filtered; + $ultimo = $numero; + } while ($numero != $fattura->numero_esterno); + + return null; +} \ No newline at end of file