Jump to content

Anno nuovo e numerazione fatture, PS come si comporta?


PEPPE83

Recommended Posts

Ciao a tutti, ho letto svariate discussioni dell'anno scorso a riguardo ma volevo sapere ad oggi PS come si comporta con la numerazione delle fatture con l'inizio del nuovo anno? Hanno risolto il problema o vanno sempre adottate soluzioni "manuali"?

Io ho la versione 1.4.8.2 ho letto che fino alla 1.4.0 avevano problemi a riguardo....

Link to comment
Share on other sites

  • 4 weeks later...
  • 2 weeks later...

Buongiorno, anche io ho lo stesso problema.

Per adesso ho modificato la numerazione attraverso il database alla stringa invoice_number. Il problema sorge per le prossime fatture. Attraverso il BO, se cerco di modificare il numero della prossima fattura, mi dice che dovrò ripartire dalla 335

 

Qualcuno può aiutarmi?

Edited by Fabrihno (see edit history)
Link to comment
Share on other sites

Spulciando nei forum ho risolto in questo modo: nel BO modifico la numerazione aggiungendo prima del numero progressivo l'anno di riferimento. In pratica il mio prossimo numero di fattura sarà 201300005.

 

Naturalmente per chi non ha ancora effettuato ordini il prossimo numero di fattura sarà 201300001 :P

 

Spero di essere stato utile,

 

Felice Anno a tutti ! :D

Edited by Fabrihno (see edit history)
Link to comment
Share on other sites

e se si mettere {num}/{anno} non è meglio? in modo da dividere l'anno dal numero...

 

Penso che dal punto di vista fiscale non sia corretto, il concetto è quello di dare sempre un numero progressivo alle fatture.

Il sistema non accetta altri segni che non siano numeri :blink:

Edited by Fabrihno (see edit history)
Link to comment
Share on other sites

Qualcuno ha provato la modifica al codice?

 

EDIT: Possibile non ci sia nessuno che ha già avuto un'esperienza di passaggio anno disponibile ad aiutarci?

Penso sia un bug enorme di prestashop e dovrebbe essere anche una funzione basilare di un gestionale e-commerce

  • Like 2
Link to comment
Share on other sites

devo resettare il contattore per le fatture! l'anno è iniziato io credevo che si resettava da solo in base all'anno nuovo invece no! uso la versione 1.5.1.0 come facciamo a resettarlo per questa versione????? qualcuno ci dia qualche dritta!

 

Io ho risolto così : http://www.prestashop.com/forums/index.php?/topic/206841-anno-nuovo-e-numerazione-fatture-ps-come-si-comporta/page__view__findpost__p__1054167

Link to comment
Share on other sites

Ho provato il sistema proposto nel post equivalente dello scorso anno ed effettivamente funziona.

 

Il concetto è questo: la procedura crea il N° fattura cercando il massimo (MAX) valore nel campo del numero fattura, e vi aggiunge 1.

In pratica dovremmo semplicemente farle cercare il massimo valore riferito al corrente anno.

In PS 1.5.3.1 il file da modificare (dopo averne fatto una copia per sicurezza) è classes/order/Order.php

alla riga 1068 abbiamo:

 

 

public static function getLastInvoiceNumber()
{
 return Db::getInstance()->getValue('
  SELECT MAX(`number`)
  FROM `'._DB_PREFIX_.'order_invoice`
 ');
}

 

che dovrebbe diventare

public static function getLastInvoiceNumber()
{
 return Db::getInstance()->getValue('
  SELECT MAX(`number`)
  FROM `'._DB_PREFIX_.'order_invoice` WHERE year(date_add) = year(current_date)
 ');
}

 

in PS 1.5.xx hanno creato una tabella specifica per le fatture (ps_order_invoice) , mentre in 1.4 i rispettivi dati sono nella tabella ps_orders

 

Per la vecchia versione dovrebbe andar bene quanto proposto nel post sopra menzionato

  • Like 1
Link to comment
Share on other sites

stavo leggendo questo articolo http://www.italiaoggi.it/news/dettaglio_news.asp?id=201301041330463938&chkAgenzie=ITALIAOGGI e c'è un punto dove dice

 

 

Ma dalla lettura delle norme dettate dal dl n. 216/2012, poi confluite nella legge di stabilità, «non è assolutamente chiaro cosa si debba intendere», osserva Marco Cuchel, presidente dell'Associazione nazionale commercialisti. Due le possibili soluzioni: la prima consiste nell'adozione di una numerazione progressiva «all'infinito», senza l'azzeramento previsto alla fine di ogni anno solare; la seconda prevede il reset della numerazione al termine di ogni anno solare, apponendo accanto al numero di fattura l'anno di emissione della stessa (anche per le eventuali serie di numerazione degli specifici registri sezionali).

 

Quindi se si considera la prima modalità la numerazione infinita che fa ps in questo momento potrebbe essere giusta?..

Link to comment
Share on other sites

Ho provato il sistema proposto nel post equivalente dello scorso anno ed effettivamente funziona.

 

Il concetto è questo: la procedura crea il N° fattura cercando il massimo (MAX) valore nel campo del numero fattura, e vi aggiunge 1.

In pratica dovremmo semplicemente farle cercare il massimo valore riferito al corrente anno.

In PS 1.5.3.1 il file da modificare (dopo averne fatto una copia per sicurezza) è classes/order/Order.php

alla riga 1068 abbiamo:

 

 

public static function getLastInvoiceNumber()
{
 return Db::getInstance()->getValue('
  SELECT MAX(`number`)
  FROM `'._DB_PREFIX_.'order_invoice`
 ');
}

 

che dovrebbe diventare

public static function getLastInvoiceNumber()
{
 return Db::getInstance()->getValue('
  SELECT MAX(`number`)
  FROM `'._DB_PREFIX_.'order_invoice` WHERE year(date_add) = year(current_date)
 ');
}

 

in PS 1.5.xx hanno creato una tabella specifica per le fatture (ps_order_invoice) , mentre in 1.4 i rispettivi dati sono nella tabella ps_orders

 

Per la vecchia versione dovrebbe andar bene quanto proposto nel post sopra menzionato

 

allora vi informo che ho fatto la modifica sulla versione 1.5.1.0 e il contatore è tornato a 1,ancora devo fare una fattura per vedere se funziona per bene e non mi dà errori..per il momento grazie mille ;)

Link to comment
Share on other sites

  • 2 weeks later...

L'Agenzia delle entrate ha chiarito l'equivoco nato sulla numerazione delle fatture. Ogni fattura deve avere un numero univoco, per le nuove aziende è più facile perché basta iniziare da 1 fino all'infinito, per le aziende già costituite o iniziano da 1 con un identificatore, ad esempio 1/qualsiasicosa, oppure 1/anno corrente 1/2013, 1/2014.

Link to comment
Share on other sites

  • 11 months later...
L'Agenzia delle entrate ha chiarito l'equivoco nato sulla numerazione delle fatture. Ogni fattura deve avere un numero univoco, per le nuove aziende è più facile perché basta iniziare da 1 fino all'infinito, per le aziende già costituite o iniziano da 1 con un identificatore, ad esempio 1/qualsiasicosa, oppure 1/anno corrente 1/2013, 1/2014.

io sono d'accordo.....meno problemi e meno rischi

 

Ma scusate se riazzeriamo le fatture facendole partire da 1, un cliente che vorrà visualizzare la sua fattura vecchia, poi non la troverà più ?

ottima osservazione......non sono in grado di testare cosa succede, ma sono sicuro che le fatture non esistono nel DB, ma solo virtualmente create nel momento in cui le visualizzi....ora l'unica cosa che le confonderebbe sarebbe il numero, tutto il resto reaterebbe diverso e quindi comunque univoco (intestatario, articoli acquistati, prezzi e totale)

Edited by ariom (see edit history)
Link to comment
Share on other sites

Le fatture non esistono 'belle e fatte' nel database, ma i dati ci sono tutti, inseriti in varie tabelle collegate; il numero e gli estremi della fattura sono in  ps_order_invoice.

Per chi avesse già fatto una fattura e vorrebbe modificarne la numerazione, può farlo in questa tabella (rispettandone la correttezza manualmente). 

In questa tabella esiste anche un campo data/ora che registra il momento di 'emissione'.

Qualche programmatore che ne avesse voglia, potrebbe pescare l'anno in questo campo per ottenere automaticamente una numerazione 001/2014 (ed integrare le modifiche sopra descritte per l'azzeramento annuale, se ancora funzionano).

Un sistema casereccio che potrebbe risolvere la numerazione indicante l'anno, gestibile da PS senza modifiche al codice, è quello accennato da totti, ciè mettere l'anno davanti (tipo 20140001 o per i più ottimisti 2014000001). Rimanendo un numero sarà correttamente memorizzato nella tabella invoice.

Per gestirlo ogni inizio di anno, bisogna modificare il numero di partenza delle fatture

Link to comment
Share on other sites

No, perchè il prefisso fattura non è memorizzato nella tabella ps_order_invoice, 

Questo è un errore degli sviluppatori, che hanno memorizzato quel prefisso in ps_configuration, senza ripeterlo fattura per fattura in ps_order_invoice quindi se lo cambi, tutte le fatture avranno il prefisso cambiato, anche quelle vecchie, che quindi, in caso di ristampa, saranno sbagliate o comunque differenti dalle fatture originariamente emesse.

 

Ma in quella stessa scheda, ogni primo gennaio andrebbe aggiornato il numero fattura inserendovi il nuovo anno. Per quest'anno, quindi, andrebbe messo ad esempio 201400001, senza barre, che il sistema poi incrementerà automaticamente di 1 in 1, essendo un numero a tutti gli effetti.

Non è il massimo, ma è sicuramente corretto.

Link to comment
Share on other sites

Scusa, mi sono dilungato, ma pensavo di essere stato chiaro.

Se nella scheda che hai allegato, nella casella 'Numero fattura', inserisci il valore 20140001, le tue fatture saranno numerate 20140001; 20140002; 20140003.... ecc.( che va bene se prevedi meno di 9.999 fatture in un anno,); il prossimo 1 gennaio dovrai aggiornare con 20150001.

Questo sistema non mi piace in assoluto, ma funziona ed è corretto fiscalmente.

Link to comment
Share on other sites

  • 2 weeks later...

Ho provato il sistema proposto nel post equivalente dello scorso anno ed effettivamente funziona.

 

Il concetto è questo: la procedura crea il N° fattura cercando il massimo (MAX) valore nel campo del numero fattura, e vi aggiunge 1.

In pratica dovremmo semplicemente farle cercare il massimo valore riferito al corrente anno.

In PS 1.5.3.1 il file da modificare (dopo averne fatto una copia per sicurezza) è classes/order/Order.php

alla riga 1068 abbiamo:

 

 

public static function getLastInvoiceNumber()
{
  return Db::getInstance()->getValue('
   SELECT MAX(`number`)
   FROM `'._DB_PREFIX_.'order_invoice`
  ');
}
che dovrebbe diventare

public static function getLastInvoiceNumber()
{
  return Db::getInstance()->getValue('
   SELECT MAX(`number`)
   FROM `'._DB_PREFIX_.'order_invoice` WHERE year(date_add) = year(current_date)
  ');
}
in PS 1.5.xx hanno creato una tabella specifica per le fatture (ps_order_invoice) , mentre in 1.4 i rispettivi dati sono nella tabella ps_orders

 

Per la vecchia versione dovrebbe andar bene quanto proposto nel post sopra menzionato

 

Ho fatto questa modifica e provato anche a fare a mano la query, il risultato è esatto però quando vado a fare una nuova fattura mi continua sempre con la vecchia numerazione, perchè ?

Link to comment
Share on other sites

  • 2 weeks later...
  • 10 months later...

Ciao,

io con la versione 1.6.0.9, dopo aver modificato il campo number sulla ps_order_invoice mettendo di nuovo il numero 1, per fargli generare il progressivo della prossima fattura correttamente ho risolto così:

 

ho copiato con ftp client il file /classes/order/Order.php dal server in locale.

 

Ho ridefinito il metodo "getLastInvoiceNumber".

 

Con una query innestata in questo modo:

 

public static function getLastInvoiceNumber()
{
return Db::getInstance()->getValue('
   SELECT `number`
FROM `'._DB_PREFIX_.'order_invoice`
where id_order_invoice = (SELECT MAX(`id_order_invoice`)
FROM `'._DB_PREFIX_.'order_invoice`)
');
}
 
In sostanza recupero da database il record con il massimo id_order_invoice ( che è chiave primaria, ovvero il record dell'ultima fattura) e di quel record il metodo ne restituisce il number a prescindere da quale esso sia.
Recupero in parole povere il valore dell'ultima fattura generata (il cui progressivo, ovvero id_order_invoice sarebbe 337 ma col nuovo anno riparte con number 1), in modo tale che la prossima fattura sarà tale valore + 1 cioè 2.
 
Dopo aver salvato le modifiche al file, onde non perdere al prossimo aggiornamento, invece di sovrascrivere il file locale sul server al suo stesso percorso, lo posiziono nel percorso di override:
 
override/classes/order
 
 
Spero di essere stato utile.
  • Like 1
Link to comment
Share on other sites

 

Ciao,

io con la versione 1.6.0.9, dopo aver modificato il campo number sulla ps_order_invoice mettendo di nuovo il numero 1, per fargli generare il progressivo della prossima fattura correttamente ho risolto così:

 

ho copiato con ftp client il file /classes/order/Order.php dal server in locale.

 

Ho ridefinito il metodo "getLastInvoiceNumber".

 

Con una query innestata in questo modo:

 

public static function getLastInvoiceNumber()
{
return Db::getInstance()->getValue('
   SELECT `number`
FROM `'._DB_PREFIX_.'order_invoice`
where id_order_invoice = (SELECT MAX(`id_order_invoice`)
FROM `'._DB_PREFIX_.'order_invoice`)
');
}
 
In sostanza recupero da database il record con il massimo id_order_invoice ( che è chiave primaria, ovvero il record dell'ultima fattura) e di quel record il metodo ne restituisce il number a prescindere da quale esso sia.
Recupero in parole povere il valore dell'ultima fattura generata (il cui progressivo, ovvero id_order_invoice sarebbe 337 ma col nuovo anno riparte con number 1), in modo tale che la prossima fattura sarà tale valore + 1 cioè 2.
 
Dopo aver salvato le modifiche al file, onde non perdere al prossimo aggiornamento, invece di sovrascrivere il file locale sul server al suo stesso percorso, lo posiziono nel percorso di override:
 
override/classes/order
 
 
Spero di essere stato utile.

 

Mi convince...faccio qualche test e ti faccio sapere grazie.

Link to comment
Share on other sites

Ciao,

ho risolto in lettura, quindi se vai in back office su ordini -> fatture vedi il prossimo numero corretto MA, mancava la controparte per la scrittura.

 

Nel metodo setLastInvoiceNumber di Order.php devi sostituire:

 

else
$sql .= '(SELECT new_number FROM (SELECT (MAX(`number`) + 1) AS new_number
FROM `'._DB_PREFIX_.'order_invoice`) AS result)';
 
 
con (parti modificate in grassetto):
 
else
$sql .= '(SELECT new_number FROM (SELECT (`number` + 1) AS new_number
FROM `'._DB_PREFIX_.'order_invoice` where id_order_invoice = (SELECT MAX(`id_order_invoice`)-1
FROM `'._DB_PREFIX_.'order_invoice`)) AS result)';

 

Altrimenti scrive a db il numero sbagliato e si comporta ancora in modo anomalo. Il principio è lo stesso della modifica che ho introdotto per il metodo getter che ti ho suggerito nella mia prima risposta.

 

Anch'io sto testando sulle mie stesse fatture sulle vendite. Per il momento ho completato il test nella mia copia in locale e funziona tutto correttamente ;-)

Edited by LucaPresta (see edit history)
Link to comment
Share on other sites

Anche io ho testato con la tua ultima modifica e sembra andare...se per altri va bene direi di fare un riepilogo dlle modifiche da fare.

Sarebbe ottimo..ci sto sbattendo la testa da un po..

Possibile che nessuno abbia pensato ad implementare questa funzionalità?

Intanto grazie

Link to comment
Share on other sites

Ciao,

riepilogo come richiesto, dal canto mio le modifiche immediatamente sotto funzionano su qualsiasi mio ambiente (sviluppo, test, produzione).

Con versione 1.6.0.9 (non ho idea se anche la dieci vada corretta, al momento non riesco ad aggiornarla senza problemi di compatibilità col mio tema custom), dopo aver modificato il campo number sulla ps_order_invoice mettendo di nuovo il numero 1, per fargli generare il progressivo della prossima fattura correttamente ho risolto così:

 

ho copiato con ftp client il file /classes/order/Order.php dal server in locale.

 

Ho ridefinito il metodo "getLastInvoiceNumber".

 

Con una query innestata in questo modo:

 

public static function getLastInvoiceNumber()

{

return Db::getInstance()->getValue('

   SELECT `number`

FROM `'._DB_PREFIX_.'order_invoice`

where id_order_invoice = (SELECT MAX(`id_order_invoice`)

FROM `'._DB_PREFIX_.'order_invoice`)

');

}

 

poi nel metodo setLastInvoiceNumber sempre di Order.php vanno sostituite le righe con il codice:

 

 

else

$sql .= '(SELECT new_number FROM (SELECT (MAX(`number`) + 1) AS new_number

FROM `'._DB_PREFIX_.'order_invoice`) AS result)';

 

 

 

con (parti modificate in grassetto):

 

 

else

$sql .= '(SELECT new_number FROM (SELECT (`number` + 1) AS new_number

FROM `'._DB_PREFIX_.'order_invoice` where id_order_invoice = (SELECT MAX(`id_order_invoice`)-1

FROM `'._DB_PREFIX_.'order_invoice`)) AS result)';

 

 

Dopo aver salvato le modifiche al file, onde non perderle al prossimo aggiornamento, invece di sovrascrivere il file locale sul server al suo stesso percorso, lo posiziono nel percorso di override:

 

override/classes/order

 

Il gioco è fatto, mi raccomando di ripartire da uno modificando il number della prima fattura di ciascun anno da db e lasciare a 0 il value di PS_START_INVOICE_NUMBER in PS_CONFIGURATION.

 

Direi che è tutto, prego di marcare questo topic come [RISOLTO] a chi lo ha aperto, in modo tale che altri possano farvi riferimento come soluzione.

 

Mi riservo di migliorare il prossimo anno la soluzione, in modo che non si debba andare ogni volta a db a modificare il number della prima fattura dell'anno, per il momento visto che funziona e che non mi sto facendo pagare, arranges :-) !

 

Luca

Edited by LucaPresta (see edit history)
  • Like 1
Link to comment
Share on other sites

  • 4 weeks later...

con questo metodo restano comunque visibili e producibili le vecchie fatture?

 

EDIT: ho provato questo workaround su PS versione 1.6.0.11 e non sembra funzionare. Nonostante abbia modificato l'order.php e settato nel DB il PS_START_INVOICE_NUMBER a 0 continua a fatturarmi dal numero 5 invece di 1.

 

Qualcuno ha avuto riscontri positivi con questo workaround?

Edited by Alexand3r (see edit history)
Link to comment
Share on other sites

  • 1 month later...

Ciao,

da poco aggiornato alla 1.6.0.14 e funziona.

 

Allego l'Order.php da inserire nel percorso:

 

override/classes/order/

 

Così facciamo prima.

 

@Alexand3r: Assicurati che da back office sotto ordini -> fatture tu abbia impostato anche "Numero fattura" a 0.

 

Naturalmente l'Order.php in allegato è quello della versione 1.6.0.14 (percorso classes/order/) con le modifiche di cui sopra, in modo che funzioni in override con la versione attuale per non perdere nulla.

 

Più di così non so come aiutare...

 

Order.php

  • Like 1
Link to comment
Share on other sites

  • 1 month later...

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...