Verifica numerazione DDT

This commit is contained in:
Beppe 2022-02-21 18:49:31 +01:00
parent 1877d48541
commit 0b478233fa
2 changed files with 54 additions and 0 deletions

View File

@ -29,6 +29,17 @@ if ($module['name'] == 'Ddt di vendita') {
$dir = 'uscita';
}
$numero_previsto = verifica_numero_ddt($ddt);
if (!empty($numero_previsto)) {
echo '
<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>';
}
?>
<form action="" method="post" id="edit-form">
<input type="hidden" name="backto" value="record-edit">

View File

@ -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;
}