Jump to content

Demande amélioration numérotation des factures


maitretsiang

Recommended Posts

Bonjour,

 

Je redécouvre depuis depuis peu les dernières versions de prestashop qui ont fort bien évolué depuis 4 ans.

Actuellement en plein lancement d'une boutique, je suis arrivé au niveau de la génération des factures... et là.... c'est le drame !!

Nous avons comme choix de numérotation de facture un simple compteur qui s'incrémente à chaque commande.

Pensez-vous qu'il serait possible de faire modifier cette partie pour que les gens puissent choisir entre le compteur par défaut et un format personnalisé ex :

 

FAAMM?????

 

F = Préfixe paramétrable

AA = Année sur 2 chiffres

MM = Mois sur 2 chiffres

????? = Compteur mensuel de facture

 

J'ai chercher des heures sans trouver de solution à ce problème (j'ai peut être mal cherché :)).

J'ai également bien pensé à modifier moi même le code source pour gérer ça mais n'ai pas envie d'avoir de problème lors des futures mises à jour.

 

Si une âme charitable pouvait éclairer ma lanterne et je pense celle de beaucoup de comptable, ça serait super !!

 

Merci d'avance et longue vie à prestashop !

Link to comment
Share on other sites

Bonjour,

 

Je n'ai jamais parlé d'importance pour le client mais bien pour nous (Dirigeant, Comptable, Etc).

Une numérotation des factures par année et par mois permet une bien meilleure gestion et lisibilité pour le service comptabilité.

Ce n'est pas pour rien qu'un tel paramétrage est possible dans un logiciel de compta.

Il me semble qu'il serait donc judicieux de trouver ce genre de chose directement dans prestashop afin de le rendre encore plus perfectionné.

Link to comment
Share on other sites

En effet très intéressant je comprends mieux.

 

Il n'y a pas de fonctions comme vous souhaitez dans presta, et il n'y a pas de module à ma connaissance qui ferait ce que vous souhaitez.

 

Pour une classification par année et par mois j'ai une solution même si quelques peu archaïque, vous pouvez modifier le préfixe au début de chaque année, le fameux FA à modifier à votre guise.

 

Par exemple la 1ere lettre pour l'année, vous avez tout l’alphabet donc 26 ans de compta et la deuxième pour le mois qui peut être un numéro par exemple mois 1-2-3 etc...

 

C'est la solution la plus simple que j'ai dans l'immédiat et gratuit.

 

Sinon la modifi de code mais ça va demander un sacré boulot et pas sur comme vous dites qu'il digère bien les maj.

Link to comment
Share on other sites

En effet très intéressant je comprends mieux.

 

Il n'y a pas de fonctions comme vous souhaitez dans presta, et il n'y a pas de module à ma connaissance qui ferait ce que vous souhaitez.

 

Pour une classification par année et par mois j'ai une solution même si quelques peu archaïque, vous pouvez modifier le préfixe au début de chaque année, le fameux FA à modifier à votre guise.

 

Par exemple la 1ere lettre pour l'année, vous avez tout l’alphabet donc 26 ans de compta et la deuxième pour le mois qui peut être un numéro par exemple mois 1-2-3 etc...

 

C'est la solution la plus simple que j'ai dans l'immédiat et gratuit.

 

Sinon la modifi de code mais ça va demander un sacré boulot et pas sur comme vous dites qu'il digère bien les maj.

Bonjour

 

Déja tester cette solution, le souci c'est que sa change sur toutes les factures même celle déja éditées.

Edited by Le-cathare (see edit history)
Link to comment
Share on other sites

/classes/order/Order.php class

setInvoice() function

$order_invoice->number = Configuration::get('PS_INVOICE_START_NUMBER', null, null, $this->id_shop);

 

Essayez de changer ce morceau de code où le numéro de la facture est créée.

 

Try to change this piece of code where number of invoice is created.

Link to comment
Share on other sites

Bon j'ai effectué quelque modifications sur les fichiers en override, je pense que ça pourra aider certaines personnes :

 

Fichier /override/classes/order/OrderInvoiced.php pour formatter le numéro de facture sans l'ajout de 0

public function getInvoiceNumberFormatted($id_lang, $id_shop = null)
{
	//return '#'.Configuration::get('PS_INVOICE_PREFIX', $id_lang, null, $id_shop).sprintf('%06d', $this->number);
	return '#'.Configuration::get('PS_INVOICE_PREFIX', $id_lang, null, $id_shop).$this->number;
}

Fichier /override/classes/order/Order.php pour stockage du bon numéro de facture

// If invoice start number has been set, you clean the value of this configuration
if ($order_invoice->number) {
	Configuration::updateValue('PS_INVOICE_START_NUMBER', false, false, null, $this->id_shop);
	$order_invoice->number = date('y').date('m').$order_invoice->number;
} else { 
	if(Order::getLastInvoiceNumber() == 0) {
		$order_invoice->number = date('y').date('m')."1";
	} else {
                $nextNumber = ((int)substr(Order::getLastInvoiceNumber(),4))+1;
		$order_invoice->number = Order::getLastInvoiceNumber().$nextNumber;
	}
}

Fichier /override/classes/pdf/HTMLTemplateInvoice.php pour génération du pdf avec le bon formattage

public function __construct(OrderInvoice $order_invoice, $smarty)
{
	$this->order_invoice = $order_invoice;
	$this->order = new Order((int)$this->order_invoice->id_order);
	$this->smarty = $smarty;

	// header informations
	$this->date = Tools::displayDate($order_invoice->date_add, (int)$this->order->id_lang);

	$id_lang = Context::getContext()->language->id;
		
	//$this->title = HTMLTemplateInvoice::l('Invoice ').' #'.Configuration::get('PS_INVOICE_PREFIX', $id_lang, null, (int)$this->order->id_shop).sprintf('%06d', $order_invoice->number);
	$this->title = HTMLTemplateInvoice::l('Invoice ').' #'.Configuration::get('PS_INVOICE_PREFIX', $id_lang, null, (int)$this->order->id_shop).$order_invoice->number;
	// footer informations
	$this->shop = new Shop((int)$this->order->id_shop);
}

public function getFilename()
{
	//return Configuration::get('PS_INVOICE_PREFIX').sprintf('%06d', $this->order_invoice->number).'.pdf';
	return Configuration::get('PS_INVOICE_PREFIX').$this->order_invoice->number.'.pdf';
}

Fichier /override/classes/PaymentModule.php

//$file_attachement['name'] = Configuration::get('PS_INVOICE_PREFIX', (int)$order->id_lang, null, $order->id_shop).sprintf('%06d', $order->invoice_number).'.pdf';
$file_attachement['name'] = Configuration::get('PS_INVOICE_PREFIX', (int)$order->id_lang, null, $order->id_shop).$order->invoice_number.'.pdf';

Pensez à supprimer ensuite le fichier de cache /cache/class_index.php afin de prendre en compte vos classe de surcharge.

 

Voilà en théorie si je n'ai rien oublié (j'ai fait ça vite fait sur une version test) vous pouvez avec ces modifs générer des numéros de facture qui prennent en compte l'année et le mois pour un meilleur traitement. On pourrait pousser le truc encore plus loin mais si les devs pouvaient inclure ce genre de chose ça serait super :)

 

PS : avec cette modif, le compteur et toujours incrémenté et n'est donc pas un compteur mensuel (pour cela il faudrait bien plus de modifs et je n'ai pas trop le temps). En tout cas dans mon cas cela me convient ^^

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

Bonjour,

 

Sauf erreur de ma part mais légalement les factures doivent avoir impérativement les numéros suivi sinon comment les impôts peuvent contrôler que toute les factures sont présente, même votre comptable ne pourra le dire.

 

A vérifier pour être certains mais à mon avis c'est une idée à oublié immédiatement car non conforme légalement.

Link to comment
Share on other sites

Bonjour,

 

Oui il est préférable d'avoir un numéro chronologique des factures pour faciliter les "contrôles" et la gestion.
A partir du moment où la logique est connue et transmise au contrôleur cela ne pose aucun problème. Je pense que le problème va plutôt se poser entre vous et votre expert comptable si votre numérotation n'a aucune logique :-)

 

L'idée de départ était de créer un numéro de la sorte (parfaitement légal) :

FAAMM????

 

F = Préfixe choisi
AA = Année sur 2 chiffres
MM = Mois sur 2 chiffres
???? = Chrono continu mensuel

 

L'avantage de cette notation est de savoir mensuellement combien nous avons généré de facture et à quelle année et mois la facture appartient (très utile pour un classement numérique)

 

La solution que j'ai proposée ne donne pas tout à fait cela mais : FAAMM?????? où ????? est un chrono continu global et qui n'est donc pas remis à zéro chaque mois.

Link to comment
Share on other sites

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...