diff --git a/modules/fatture/actions.php b/modules/fatture/actions.php index 3bac46440..855959330 100644 --- a/modules/fatture/actions.php +++ b/modules/fatture/actions.php @@ -23,8 +23,9 @@ switch (post('op')) { $dir = $post['dir']; $idtipodocumento = post('idtipodocumento'); - $numero = get_new_numerofattura($data); $id_segment = post('id_segment'); + $numero = get_new_numerofattura($data); + if ($dir == 'entrata') { $numero_esterno = get_new_numerosecondariofattura($data); $idconto = get_var('Conto predefinito fatture di vendita'); @@ -77,12 +78,15 @@ switch (post('op')) { $totale_imponibile = get_imponibile_fattura($id_record); $totale_fattura = get_totale_fattura($id_record); + if ($dir == 'uscita') { $idrivalsainps = post('idrivalsainps'); $idritenutaacconto = post('idritenutaacconto'); + $numero = prepare(post('numero')); } else { $idrivalsainps = 0; $idritenutaacconto = 0; + $numero = '(SELECT t.numero FROM (SELECT * FROM co_documenti) t WHERE t.id = '.prepare($post['id_record']).')'; } // Leggo la descrizione del pagamento @@ -93,6 +97,7 @@ switch (post('op')) { // Query di aggiornamento $query = 'UPDATE co_documenti SET '. ' data='.prepare($data).','. + ' numero='.$numero.','. ' idstatodocumento='.prepare($idstatodocumento).','. ' idtipodocumento='.prepare($idtipodocumento).','. ' idanagrafica='.prepare($idanagrafica).','. diff --git a/modules/fatture/edit.php b/modules/fatture/edit.php index 2c822a964..84524a625 100644 --- a/modules/fatture/edit.php +++ b/modules/fatture/edit.php @@ -55,7 +55,7 @@ $_SESSION['superselect']['ddt'] = $dir; if ($dir == 'uscita') { echo '
- {[ "type": "span", "label": "'.tr('Numero fattura').'", "name": "numero","class": "text-center", "value": "$numero$" ]} + {[ "type": "text", "label": "'.tr('Numero fattura').'", "required": 1, "name": "numero","class": "text-center", "value": "$numero$" ]}
'; $label = tr('Numero secondario'); } else { diff --git a/modules/fatture/modutil.php b/modules/fatture/modutil.php index f17d4ae24..665bfa43b 100644 --- a/modules/fatture/modutil.php +++ b/modules/fatture/modutil.php @@ -7,11 +7,52 @@ function get_new_numerofattura($data) { global $dbo; global $dir; + global $id_segment; - $query = "SELECT IFNULL(MAX(numero),'0') AS max_numerofattura FROM co_documenti WHERE DATE_FORMAT( data, '%Y' ) = ".prepare(date('Y', strtotime($data))).' AND idtipodocumento IN(SELECT id FROM co_tipidocumento WHERE dir='.prepare($dir).') ORDER BY CAST(numero AS UNSIGNED) DESC LIMIT 0, 1'; - $rs = $dbo->fetchArray($query); + if ($dir = 'uscita'){ - $numero = $rs[0]['max_numerofattura'] + 1; + // recupero maschera per questo segmento + $rs_maschera = $dbo->fetchArray("SELECT pattern FROM zz_segments WHERE id = '".$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 ); + + $anno = substr( $data, 0, 4); + + $query = "SELECT numero FROM co_documenti WHERE DATE_FORMAT(data,'%Y')='".$anno."' AND id_segment='".$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"; + endif; + + $rs_ultima_fattura = $dbo->fetchArray( $query ); + + //$numero = get_next_code( $rs_ultima_fattura[0]['numero'], 1, $maschera ); + $numero = Util\Generator::generate($maschera, $rs_ultima_fattura[0]['numero']); + + // sostituisco anno nella maschera + $anno = substr( $anno, -strlen($m2[0]) ); // nel caso ci fosse YY + $numero = str_replace( $m2[0], $anno, $numero ); + + /*echo $numero; + echo $maschera; + echo $query; + exit;*/ + + }else{ + + $query = "SELECT IFNULL(MAX(numero),'0') AS max_numerofattura FROM co_documenti WHERE DATE_FORMAT( data, '%Y' ) = ".prepare(date('Y', strtotime($data))).' AND idtipodocumento IN(SELECT id FROM co_tipidocumento WHERE dir='.prepare($dir).') ORDER BY CAST(numero AS UNSIGNED) DESC LIMIT 0, 1'; + $rs = $dbo->fetchArray($query); + + $numero = $rs[0]['max_numerofattura'] + 1; + + } return $numero; } diff --git a/update/2_4.sql b/update/2_4.sql index bf938e4ba..069e82683 100644 --- a/update/2_4.sql +++ b/update/2_4.sql @@ -280,3 +280,6 @@ UPDATE `zz_modules` SET `options` = 'SELECT |select| FROM `mg_movimenti` JOIN `m DELETE FROM `zz_settings` WHERE `zz_settings`.`nome` = 'Indirizzo per le email in uscita'; DELETE FROM `zz_settings` WHERE `zz_settings`.`nome` = 'Destinatario'; DELETE FROM `zz_settings` WHERE `zz_settings`.`nome` = 'Destinatario fisso in copia (campo CC)'; + +-- Conversione numero co_documenti da int(11) a varchar(100) +ALTER TABLE `co_documenti` CHANGE `numero` `numero` VARCHAR(100) NOT NULL; \ No newline at end of file