This commit is contained in:
Thomas Zilio 2019-01-10 20:10:47 +01:00
parent 4eec16552f
commit 7f002554c1
5 changed files with 58 additions and 55 deletions

View File

@ -140,14 +140,15 @@ class DDT extends Document
*/
public static function getNextNumero($data, $direzione)
{
$database = database();
$maschera = '#';
$rs = $database->fetchOne("SELECT IFNULL(MAX(numero), '0') AS max_numero FROM dt_ddt WHERE YEAR(data) = :year AND idtipoddt IN(SELECT id FROM dt_tipiddt WHERE dir = :direction) ORDER BY CAST(numero AS UNSIGNED) DESC", [
':year' => date('Y', strtotime($data)),
':direction' => $direzione,
$ultimo = Generator::getPreviousFrom($maschera, 'dt_ddt', 'numero', [
'YEAR(data) = '.prepare(date('Y', strtotime($data))),
'idtipoddt IN (SELECT id FROM dt_tipiddt WHERE dir = '.prepare($direzione).')',
]);
$numero = Generator::generate($maschera, $ultimo);
return intval($rs['max_numero']) + 1;
return $numero;
}
/**
@ -164,17 +165,14 @@ class DDT extends Document
return '';
}
$database = database();
$maschera = setting('Formato numero secondario ddt');
$ultimo_ddt = $database->fetchOne('SELECT numero_esterno FROM dt_ddt WHERE YEAR(data) = :year AND idtipoddt IN (SELECT id FROM dt_tipiddt WHERE dir = :direction) '.Generator::getMascheraOrder($maschera, 'numero_esterno'), [
':year' => date('Y', strtotime($data)),
':direction' => $direzione,
$ultimo = Generator::getPreviousFrom($maschera, 'dt_ddt', 'numero_esterno', [
'YEAR(data) = '.prepare(date('Y', strtotime($data))),
'idtipoddt IN (SELECT id FROM dt_tipiddt WHERE dir = '.prepare($direzione).')',
]);
$numero = Generator::generate($maschera, $ultimo, 1, Generator::dateToPattern($data));
$numero_esterno = Generator::generate($maschera, $ultimo_ddt['numero_esterno'], 1, Generator::dateToPattern($data));
return $numero_esterno;
return $numero;
}
}

View File

@ -238,17 +238,14 @@ class Fattura extends Document
return '';
}
$database = database();
// Recupero maschera per questo segmento
$maschera = Generator::getMaschera($id_segment);
$ultima_fattura = $database->fetchOne('SELECT numero FROM co_documenti WHERE YEAR(data) = :year AND id_segment = :id_segment '.Generator::getMascheraOrder($maschera, 'numero'), [
':year' => date('Y', strtotime($data)),
':id_segment' => $id_segment,
$ultimo = Generator::getPreviousFrom($maschera, 'co_documenti', 'numero', [
'YEAR(data) = '.prepare(date('Y', strtotime($data))),
'id_segment = '.prepare($id_segment),
]);
$numero = Generator::generate($maschera, $ultima_fattura['numero'], 1, Generator::dateToPattern($data));
$numero = Generator::generate($maschera, $ultimo, 1, Generator::dateToPattern($data));
return $numero;
}
@ -268,17 +265,14 @@ class Fattura extends Document
return '';
}
$database = database();
// Recupero maschera per questo segmento
$maschera = Generator::getMaschera($id_segment);
$ultima_fattura = $database->fetchOne('SELECT numero_esterno FROM co_documenti WHERE YEAR(data) = :year AND id_segment = :id_segment '.Generator::getMascheraOrder($maschera, 'numero_esterno'), [
':year' => date('Y', strtotime($data)),
':id_segment' => $id_segment,
$ultimo = Generator::getPreviousFrom($maschera, 'co_documenti', 'numero_esterno', [
'YEAR(data) = '.prepare(date('Y', strtotime($data))),
'id_segment = '.prepare($id_segment),
]);
$numero_esterno = Generator::generate($maschera, $ultima_fattura['numero_esterno'], 1, Generator::dateToPattern($data));
$numero = Generator::generate($maschera, $ultimo, 1, Generator::dateToPattern($data));
return $numero_esterno;
}

View File

@ -140,14 +140,15 @@ class Ordine extends Document
*/
public static function getNextNumero($data, $direzione)
{
$database = database();
$maschera = '#';
$rs = $database->fetchOne("SELECT IFNULL(MAX(numero), '0') AS max_numero FROM or_ordini WHERE YEAR(data) = :year AND idtipoordine IN(SELECT id FROM or_tipiordine WHERE dir = :direction) ORDER BY CAST(numero AS UNSIGNED) DESC", [
':year' => date('Y', strtotime($data)),
':direction' => $direzione,
$ultimo = Generator::getPreviousFrom($maschera, 'or_ordini', 'numero', [
'YEAR(data) = '.prepare(date('Y', strtotime($data))),
'idtipoordine IN (SELECT id FROM or_tipiordine WHERE dir = '.prepare($direzione).')',
]);
$numero = Generator::generate($maschera, $ultimo);
return intval($rs['max_numero']) + 1;
return $numero;
}
/**
@ -164,17 +165,14 @@ class Ordine extends Document
return '';
}
$database = database();
$maschera = setting('Formato numero secondario ordine');
$ultimo_ordine = $database->fetchOne('SELECT numero_esterno FROM or_ordini WHERE YEAR(data) = :year AND idtipoordine IN (SELECT id FROM or_tipiordine WHERE dir = :direction) '.Generator::getMascheraOrder($maschera, 'numero_esterno'), [
':year' => date('Y', strtotime($data)),
':direction' => $direzione,
$ultimo = Generator::getPreviousFrom($maschera, 'or_ordini', 'numero_esterno', [
'YEAR(data) = '.prepare(date('Y', strtotime($data))),
'idtipoordine IN (SELECT id FROM or_tipiordine WHERE dir = '.prepare($direzione).')',
]);
$numero = Generator::generate($maschera, $ultimo, 1, Generator::dateToPattern($data));
$numero_esterno = Generator::generate($maschera, $ultimo_ordine['numero_esterno'], 1, Generator::dateToPattern($data));
return $numero_esterno;
return $numero;
}
}

View File

@ -141,19 +141,10 @@ class Preventivo extends Document
*/
public static function getNextNumero()
{
$database = database();
$maschera = setting('Formato codice preventivi');
$ultimo_preventivo = $database->fetchOne('SELECT numero FROM co_preventivi WHERE numero=(SELECT MAX(CAST(numero AS SIGNED)) FROM co_preventivi) AND numero LIKE('.prepare(Generator::complete($maschera)).') ORDER BY numero DESC');
$numero = Generator::generate($maschera, $ultimo_preventivo['numero']);
if (!is_numeric($numero)) {
$ultimo_preventivo = $database->fetchOne('SELECT numero FROM co_preventivi WHERE numero LIKE('.prepare(Generator::complete($maschera)).') ORDER BY numero DESC');
$numero = Generator::generate($maschera, $ultimo_preventivo['numero']);
}
$ultimo = Generator::getPreviousFrom($maschera, 'co_preventivi', 'numero');
$numero = Generator::generate($maschera, $ultimo);
return $numero;
}

View File

@ -2,6 +2,8 @@
namespace Util;
use Illuminate\Database\Capsule\Manager;
/**
* Classe dedicata alla gestione e all'interpretazione delle stringhe personalizzate.
*
@ -172,6 +174,24 @@ class Generator
return $maschera['pattern'];
}
public static function getPreviousFrom($maschera, $table, $field, $where = [])
{
$order = static::getMascheraOrder($maschera, $field);
$maschera = Generator::complete($maschera);
$maschera = str_replace('#', '%', $maschera);
$query = Manager::table($table)->select($field)->where($field, 'like', $maschera)->orderByRaw($order);
foreach ($where as $and) {
$query->whereRaw($and);
}
$result = $query->first();
return $result->{$field};
}
/**
* Metodo per l'individuazione del tipo di ordine da impostare per la corretta interpretazione della maschera.
* Esempi:
@ -179,19 +199,21 @@ class Generator
* - maschere di soli numeri (####-YYYY) è necessario l'ordinamento numerico forzato.
*
* @param string $maschera
* @param string $field
*
* @return string
*/
public static function getMascheraOrder($maschera, $field)
protected static function getMascheraOrder($maschera, $field)
{
// Query di default
$query = $field.' DESC';
// Estraggo blocchi di caratteri standard
preg_match('/[#]+/', $maschera, $m1);
$pos1 = strpos($maschera, $m1[0]);
if ($pos1 == 0) {
$query = 'ORDER BY CAST('.$field.' AS UNSIGNED) DESC';
} else {
$query = 'ORDER BY '.$field.' DESC';
$query = 'CAST('.$field.' AS UNSIGNED) DESC';
}
return $query;