Aggiornamento numerazione fatture

This commit is contained in:
Thomas Zilio 2018-08-31 17:41:24 +02:00
parent 3ec71ec1a7
commit 2e33090197
2 changed files with 12 additions and 77 deletions

View File

@ -1,5 +1,7 @@
<?php <?php
use Modules\Fatture\Fattura;
/** /**
* Funzione per generare un nuovo numero per la fattura. * Funzione per generare un nuovo numero per la fattura.
*/ */
@ -8,38 +10,7 @@ function get_new_numerofattura($data)
global $dir; global $dir;
global $id_segment; global $id_segment;
$dbo = Database::getConnection(); return Fattura::getNumero($data, $dir, $id_segment);
// 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 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;
} }
/** /**
@ -50,34 +21,7 @@ function get_new_numerosecondariofattura($data)
global $dir; global $dir;
global $id_segment; global $id_segment;
$dbo = Database::getConnection(); return Fattura::getNumeroSecondario($data, $dir, $id_segment);
// 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;
} }
/** /**

View File

@ -102,27 +102,18 @@ class Fattura extends Model
* *
* @return string * @return string
*/ */
protected static function getNumero($data, $direzione, $id_segment) public static function getNumero($data, $direzione, $id_segment)
{ {
$dbo = database(); $dbo = database();
if ($direzione == 'uscita') { $maschera = $direzione == 'uscita' ? static::getMaschera($id_segment) : '#';
$maschera = 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), [ $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)), ':year' => date('Y', strtotime($data)),
':id_segment' => $id_segment, ':id_segment' => $id_segment,
]); ]);
$numero = Generator::generate($maschera, $ultima_fattura['numero']); $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;
}
return $numero; return $numero;
} }
@ -136,7 +127,7 @@ class Fattura extends Model
* *
* @return string * @return string
*/ */
protected static function getNumeroSecondario($data, $direzione, $id_segment) public static function getNumeroSecondario($data, $direzione, $id_segment)
{ {
if ($direzione == 'uscita') { if ($direzione == 'uscita') {
return ''; return '';