diff --git a/modules/fatture/modutil.php b/modules/fatture/modutil.php index 7dfc3f602..2acce9a11 100644 --- a/modules/fatture/modutil.php +++ b/modules/fatture/modutil.php @@ -1,5 +1,7 @@ fetchArray('SELECT pattern FROM zz_segments WHERE id = '.prepare($id_segment)); - // esempio: ####/YY - $maschera = $rs_maschera[0]['pattern']; - - // estraggo blocchi di caratteri standard da sostituire - preg_match('/[#]+/', $maschera, $m1); - preg_match('/[Y]+/', $maschera, $m2); - - $query = "SELECT numero FROM co_documenti WHERE DATE_FORMAT(data,'%Y') = ".prepare(date('Y', strtotime($data))).' AND id_segment = '.prepare($id_segment); - - $pos1 = strpos($maschera, $m1[0]); - if ($pos1 == 0) { - $query .= ' ORDER BY CAST(numero AS UNSIGNED) DESC LIMIT 0,1'; - } else { - $query .= ' ORDER BY numero DESC LIMIT 0,1'; - } - - $rs_ultima_fattura = $dbo->fetchArray($query); - - if ($dir == 'uscita') { - $numero = Util\Generator::generate($maschera, $rs_ultima_fattura[0]['numero']); - } else { - // NB: Fatture di vendita ($dir = entrata) - // il campo numero per questa tipologia di documento è nascosto nel modulo, ma poi viene utilizzato - // come numero di protocollo nelle stampe fiscali, calcolo quindi un progressivo semplice (es. 1, 2, 3, etc) - $numero = Util\Generator::generate('#', $rs_ultima_fattura[0]['numero']); - } - - return $numero; + return Fattura::getNumero($data, $dir, $id_segment); } /** @@ -50,34 +21,7 @@ function get_new_numerosecondariofattura($data) global $dir; global $id_segment; - $dbo = Database::getConnection(); - - // recupero maschera per questo segmento - $rs_maschera = $dbo->fetchArray('SELECT pattern FROM zz_segments WHERE id = '.prepare($id_segment)); - // esempio: ####/YY - $maschera = $rs_maschera[0]['pattern']; - - // estraggo blocchi di caratteri standard da sostituire - preg_match('/[#]+/', $maschera, $m1); - preg_match('/[Y]+/', $maschera, $m2); - - $query = "SELECT numero_esterno FROM co_documenti WHERE DATE_FORMAT(data,'%Y') = ".prepare(date('Y', strtotime($data))).' AND id_segment='.prepare($id_segment); - // Marzo 2017 - // nel caso ci fossero lettere prima della maschera ### per il numero (es. FT-0001-2017) - // è necessario l'ordinamento alfabetico "ORDER BY numero_esterno" altrimenti - // nel caso di maschere del tipo 001-2017 è necessario l'ordinamento numerico "ORDER BY CAST(numero_esterno AS UNSIGNED)" - $pos1 = strpos($maschera, $m1[0]); - if ($pos1 == 0) { - $query .= ' ORDER BY CAST(numero_esterno AS UNSIGNED) DESC LIMIT 0,1'; - } else { - $query .= ' ORDER BY numero_esterno DESC LIMIT 0,1'; - } - - $rs_ultima_fattura = $dbo->fetchArray($query); - - $numero_esterno = Util\Generator::generate($maschera, $rs_ultima_fattura[0]['numero_esterno']); - - return $numero_esterno; + return Fattura::getNumeroSecondario($data, $dir, $id_segment); } /** diff --git a/modules/fatture/src/Fattura.php b/modules/fatture/src/Fattura.php index 6ff254c06..238954f47 100644 --- a/modules/fatture/src/Fattura.php +++ b/modules/fatture/src/Fattura.php @@ -102,27 +102,18 @@ class Fattura extends Model * * @return string */ - protected static function getNumero($data, $direzione, $id_segment) + public static function getNumero($data, $direzione, $id_segment) { $dbo = database(); - if ($direzione == 'uscita') { - $maschera = static::getMaschera($id_segment); + $maschera = $direzione == 'uscita' ? static::getMaschera($id_segment) : '#'; - $ultima_fattura = $dbo->fetchOne('SELECT numero_esterno FROM co_documenti WHERE YEAR(data) = :year AND id_segment = :id_segment '.static::getMascheraOrder($maschera), [ - ':year' => date('Y', strtotime($data)), - ':id_segment' => $id_segment, - ]); + $ultima_fattura = $dbo->fetchOne('SELECT numero_esterno FROM co_documenti WHERE YEAR(data) = :year AND id_segment = :id_segment '.static::getMascheraOrder($maschera), [ + ':year' => date('Y', strtotime($data)), + ':id_segment' => $id_segment, + ]); - $numero = Generator::generate($maschera, $ultima_fattura['numero']); - } else { - $rs = $dbo->fetchOne("SELECT IFNULL(MAX(numero), '0') AS max_numerofattura FROM co_documenti WHERE YEAR(data) = :year AND idtipodocumento IN(SELECT id FROM co_tipidocumento WHERE dir = :direzione) ORDER BY CAST(numero AS UNSIGNED) DESC", [ - ':year' => date('Y', strtotime($data)), - ':direzione' => $direzione, - ]); - - $numero = $rs['max_numerofattura'] + 1; - } + $numero = Generator::generate($maschera, $ultima_fattura['numero']); return $numero; } @@ -136,7 +127,7 @@ class Fattura extends Model * * @return string */ - protected static function getNumeroSecondario($data, $direzione, $id_segment) + public static function getNumeroSecondario($data, $direzione, $id_segment) { if ($direzione == 'uscita') { return '';