Fix #422
This commit is contained in:
parent
4eec16552f
commit
7f002554c1
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
|
|
Loading…
Reference in New Issue