THELIA Forum

Welcome to the THELIA support and discusssion forum

Announcement

Rejoignez la communauté sur le Discord Thelia : https://discord.gg/YgwpYEE3y3

Offline

#1 Plugin Références Perso

(12-02-2010 02:09:16)


Ce plugin vous permet de définir vos propres références de client, de commande, de facture et de bon de livraison. Il nécessite quelques connaissances en PHP, car pour créer vos références personnalisées, vous devrez intervenir dans le code du plugin.

Téléchargement sur Ergonoshop, et prochainement dans les contribs.

Voici le fichier LISEZMOI.txt, qui précise le fonctionnement et la mise en oeuvre de ce plugin.

PLUGIN REFERENCES PERSO
-----------------------

Ce plugin vous permet de définir vos propres références de client, de commande, 
de facture et de bon de livraison.

Le plugin nécessite quelques connaissances en PHP, car pour créer vos références
personnalisées, vous devrez intervenir le code du plugin, et modifier une ou
plusieurs des méthodes suivantes:

    - generer_numero_client($client)
	- generer_numero_commande($commande)
	- generer_numero_facture($commande)
    - generer_numero_livraison($commande)

generer_numero_client($client) doit retourner la référence d'un nouveau client.
Si vous ne souhaitez pas la modifier, il suffit de retourner $client->ref.

generer_numero_commande($commande) doit retourner la référence de la commande.
Si vous ne souhaitez pas la modifier, il suffit de retourner $commande->ref.

generer_numero_facture($commande) doit retourner la référence de la facture.
Si vous ne souhaitez pas la modifier, il suffit de retourner $commande->facture.

generer_numero_livraison($commande) doit retourner la référence du bon de
livraison. $commande->ref contient la référence retournée par generer_numero_commande().
Si vous ne souhaitez modifier la référence du BL, il suffit de retourner 
$commande->livraison.

Par defaut, le plugin n'apporte aucune modification aux références.


EXEMPLE
-------

A titre d'exemple, voici le code PHP permettant de créer des numéros de facture
de type F-annee-numero, ou annee est l'année en cours, et numéro un nombre  
partant de 1000, incrémenté pour chaque facture, et réinitialisé chaque année.

Dans la méthode init(), créer deux variables Thélia, l'une contenant le prochain
numéro de facture, et l'autre l'année courante :

   $this->create_variable('prochain_numero_facture', 1000, 0);
   $this->create_variable('rp_annee_courante', date('y'), 0);
   
Pour bien faire, il faut prévoir la suppression de ces deux variables dans la
methode destroy():

  $this->delete_variable('prochain_numero_facture');
  $this->delete_variable('rp_annee_courante');

La méthode generer_numero_facture devient alors:

    private function generer_numero_facture($commande)
    {
       // Vérifier tout d'abord que nous n'avons pas changé d'année
    	if ($year = $this->get_variable('rp_annee_courante'))
    	{
    		$now = intval(date('y'));
    		
    		// Si c'est le cas...
    		if (intval($now) > intval($year))
    		{
    		    // Réinitialiser le numéro de facture
    			$this->set_variable('rp_annee_courante', $now);
    			$this->set_variable('prochain_numero_facture', 1000);
    		}
    	}
       
       // Calculer ensuite la référence de notre facture
       
	   // Récuperer l'année courante sur 4 chiffres
	   $an = date('Y');
	   
	   // Récupérer le numéro de facture
	   $num = intval($this->get_variable('prochain_numero_facture'));
			
	   // Incrémenter le numéro de facture
	   $this->set_variable('prochain_numero_facture', $num + 1);
	   
	   // Gérer la référence de notre facture
	   return 'F-' . $an . '-' . sprintf('%04d', $num);
    }

Last edited by roadster31 (13-02-2010 02:16:00)


OpenStudio Toulouse

Offline


merci pour ce plug-in mais perso je n'ai pas réussi à l'utiliser.
en m'appuyant sur l'exemple du readme j'ai fait ceci :

dans init()
$this->create_variable('prochain_numero_facture', 1000, 0);

dans destroy()
$this->delete_variable('prochain_numero_facture');

dans generer_numero_facture($commande)
$num = intval($this->get_variable('prochain_numero_facture'));
$this->set_variable('prochain_numero_facture', $num + 1);
return 'F-' . sprintf('%04d', $num);

rien n'est retourné je pense car le numero de facture sort à 0
de plus la date de facture aussi passe à 0

pourtant si je fais "return 45" par exemple, j'ai bien mon numéro de facture à 45.

que se passe-t-il donc ?

Offline


Aucune idée. Sans voir le code, je ne peux rien faire.


OpenStudio Toulouse

Offline


Je n'ai rien modifié de plus que ce que j'ai indiqué au dessus.
voici mon referencesperso.class.php entier.
merci d'avance

<?php
include_once(realpath(dirname(__FILE__)) . "/../../../classes/PluginsClassiques.class.php");
include_once(realpath(dirname(__FILE__)) . "/../../../classes/Client.class.php");
include_once(realpath(dirname(__FILE__)) . "/../../../classes/Commande.class.php");
include_once(realpath(dirname(__FILE__)) . "/../../../classes/Variable.class.php");

define('RP_VERSION', '1.0.0');

class Referencesperso extends PluginsClassiques
{
	function Referencesperso()
    {
    	parent::PluginsClassiques("referencesperso");
	}

	function init()
    { 
		$this->ajout_desc(
                "referencesperso",
                "Plugin Références Perso",
                "Ce plugin permet de générer vos propres références de client, de commande et de livraisons.",
                1);
		$this->create_variable('prochain_numero_facture', 1000, 0);
	}

    function destroy()
    {
		$this->delete_variable('prochain_numero_facture');
    }
    
    public function aprescommande($commande)
    {
    	$ref = $this->generer_numero_commande($commande);
    	
    	if ($ref != $commande->ref)
    	{
			$commande->ref = $ref;
		
	    	$liv = $this->generer_numero_livraison($commande);

			$commande->livraison = $liv;
			
			$commande->maj();
		}
    }

    public function apresclient($client)
    {
    	$ref = $this->generer_numero_client($client);
    	
    	if ($ref != $client->ref)
    	{
    		$client->ref = $ref;
				
			$client->maj();
		}
    }

    function statut($commande)
    {
    	$ref = $this->generer_numero_facture($commande);
    	
    	if ($ref != $commande->facture)
    	{
			$commande->facture = $ref;
			
			$commande->maj();
    	}
    }
    
    // -- Fonctions spécifiques ------------------------------------------------
     
    private function generer_numero_facture($commande)
    {
    	// Récupérer le numéro de facture
	   $num = intval($this->get_variable('prochain_numero_facture'));
			
	   // Incrémenter le numéro de facture
	   $this->set_variable('prochain_numero_facture', $num + 1);
	   // Gérer la référence de notre facture
	   return 'F-' . sprintf('%04d', $num);
    }
   
    private function generer_numero_commande($commande)
    {
    	return $commande->ref;
    }
    
    private function generer_numero_livraison($commande)
    {
    	return $commande->livraison;
    }

    private function generer_numero_client($client)
    {
    	return $client->ref;
    }
    
	// -- Outils ---------------------------------------------------------------
	
    public function get_variable($nom)
    {
        $var = new Variable();
        
        if ($var->charger($nom))
        {
            return $var->valeur;
        }
        
        return false;
    }
    
    protected function set_variable($nom, $valeur)
    {
        $variable = new Variable();
        
        if ($variable->charger($nom))
        {
        	$variable->valeur = $valeur;
        	$variable->maj();
        }
    }
    
    protected function create_variable($nom, $valeur, $cache = 1)
    {
        $variable = new Variable();
        
        $variable->nom = $nom;
        $variable->valeur = $valeur;
        $variable->protege = 1;
        $variable->cache = $cache;

        $variable->add();
    }
    
    protected function delete_variable($nom)
    {
        $variable = new Variable();
        
        if ($variable->charger($nom)) $variable->delete();
    }
    
}
?>

Offline


Da le B.O., Configuration -> gestion des variables, voit-on la variable prochain_numero_facture ?

Si non: désactiver puis réactiver le plugin.

Si oui, quelle est sa valeur ?


OpenStudio Toulouse

Offline


on la voit, et elle est à 1000
j'ai desinstallé/réinstallé le plug-in sans succès

Je suis sur un Thelia 1.4.4, c'est compatible ?

Offline


Oui, ça devrait être compatible 1.4

Aucune idée de la cause du problème, désolé.


OpenStudio Toulouse

Offline


est ce que ceci peut t'aider ?
Je m'aperçois qu'à l'installation du plug-in, les modifications de code, et surtout la création de variables Thelia ne sont pas répercutées sur le back-office.
Par contre, elles le sont après desactivation/activation du plug-in.

Au jour d'aujourd'hui, voila ce que j'ai fait :

<?php
include_once(realpath(dirname(__FILE__)) . "/../../../classes/PluginsClassiques.class.php");
include_once(realpath(dirname(__FILE__)) . "/../../../classes/Client.class.php");
include_once(realpath(dirname(__FILE__)) . "/../../../classes/Commande.class.php");
include_once(realpath(dirname(__FILE__)) . "/../../../classes/Variable.class.php");

define('RP_VERSION', '1.0.0');

class Referencesperso extends PluginsClassiques
{
	function Referencesperso()
    {
    	parent::PluginsClassiques("referencesperso");
	}

	function init()
    { 
		$this->ajout_desc(
                "referencesperso",
                "Plugin Références Perso",
                "Ce plugin permet de générer vos propres références de client, de commande et de livraisons.",
                1);
		$this->create_variable('prochain_numero_facture', 1000, 0);
		$this->create_variable('prochain_numero_commande', 1000, 0);
	}

    function destroy()
    {
		$this->delete_variable('prochain_numero_facture');
		$this->delete_variable('prochain_numero_commande');
    }
    
    public function aprescommande($commande)
    {
    	$ref = $this->generer_numero_commande($commande);
    	
    	if ($ref != $commande->ref)
    	{
			$commande->ref = $ref;
		
	    	$liv = $this->generer_numero_livraison($commande);

			$commande->livraison = $liv;
			
			$commande->maj();
		}
    }

    public function apresclient($client)
    {
    	$ref = $this->generer_numero_client($client);
    	
    	if ($ref != $client->ref)
    	{
    		$client->ref = $ref;
				
			$client->maj();
		}
    }

    function statut($commande)
    {
    	$ref = $this->generer_numero_facture($commande);
    	
    	if ($ref != $commande->facture)
    	{
			$commande->facture = $ref;
			
			$commande->maj();
    	}
    }
    
    // -- Fonctions spécifiques ------------------------------------------------
     
    private function generer_numero_facture($commande)
    {
    	// Récupérer le numéro de facture
	   $num = intval($this->get_variable('prochain_numero_facture'));
			
	   // Incrémenter le numéro de facture
	   $this->set_variable('prochain_numero_facture', $num + 1);
	   // Gérer la référence de notre facture
	   return 'F-' . sprintf('%04d', $num);
    }
   
    private function generer_numero_commande($commande)
    {
    	// Récupérer le numéro de commande
	   $num = intval($this->get_variable('prochain_numero_commande'));
			
	   // Incrémenter le numéro de commande
	   $this->set_variable('prochain_numero_commande', $num + 1);
	   // Gérer la référence de notre commande
	   return 'C-' . sprintf('%04d', $num);
    }
    
    private function generer_numero_livraison($commande)
    {
    	return $commande->livraison;
    }

    private function generer_numero_client($client)
    {
    	return $client->ref;
    }
    
	// -- Outils ---------------------------------------------------------------
	
    public function get_variable($nom)
    {
        $var = new Variable();
        
        if ($var->charger($nom))
        {
            return $var->valeur;
        }
        
        return false;
    }
    
    protected function set_variable($nom, $valeur)
    {
        $variable = new Variable();
        
        if ($variable->charger($nom))
        {
        	$variable->valeur = $valeur;
        	$variable->maj();
        }
    }
    
    protected function create_variable($nom, $valeur, $cache = 1)
    {
        $variable = new Variable();
        
        $variable->nom = $nom;
        $variable->valeur = $valeur;
        $variable->protege = 1;
        $variable->cache = $cache;

        $variable->add();
    }
    
    protected function delete_variable($nom)
    {
        $variable = new Variable();
        
        if ($variable->charger($nom)) $variable->delete();
    }
    
}
?>

Les 2 variables sont visibles dans le BO, j'y ai entré en valeur "590" pour chacune.
Ca fonctionne très bien pour le numéro de commande !
j'ai en numero : C-590, C-591, C-592 ...

Par contre, pour le numero de facture, toutes les factures sortent sous le numero 1000
La valeur entrée dans le BO n'est pas pris en compte, le "F-" non plus et le "1000" entré dans le fichier PHP n'est pas incrémenté.
Pourtant niveau code dans la class Referencesperso, prochain_numero_facture et prochain_numero_commande semblent devoir fonctionner exactement de la même façon.
une piste ?

Last edited by ChDUP (02-06-2012 14:20:56)

Offline


une piste :
la methode genfact de la class Commande

function genfact(){

			if($this->facture) return 0;

			$this->datefact = date("Y-m-d");

			$query = "select max(facture) as mfact from $this->table";
			$resul = mysql_query($query, $this->link);

			if(mysql_result($resul, 0, "mfact")>0) $this->facture = mysql_result($resul, 0, "mfact") + 1;
			else $this->facture = 1000;

Il semblerait que le mysql_result retourne 0.
mais pourquoi ?

Offline


pour savoir: echo mysql_error();


OpenStudio Toulouse

Offline


et à quel moment l'erreur doit s'afficher ?
je veux dire, à quel moment genfact est sollicité ?
A priori au moment où l'etat de la commande passe en "payé"

J'ai progressé ...
En fait tout fonctionne bien quand on passe manuellement l'état de la commande en "payé" (dans le cas d'un chèque en fait)
Par contre lors d'un paiement par CB, et donc passage automatique en "payé", le numéro de facture est de 1000.
et la, je ne vois vraiment pas pourquoi ...

Offline


il faut rajouter une méthode confirmation:

function confirmation($commande) {

        $ref = $this->generer_numero_facture($commande);
       
        if ($ref != $commande->facture)
        {
            $commande->facture = $ref;
           
            $commande->maj();
        }
}

Et changer la méthode statut() par :

    function statut($commande) {
        if ($commande->statut == 2) $this->confirmation($commande);
    }


OpenStudio Toulouse

Offline


magnifique roadster
ça fonctionne parfaitement maintenant

merci beaucoup

Offline


Cool smile Je met le plugin à jour.


OpenStudio Toulouse

Offline


bonjour , je remonte ce post pour connaitre la méthode pour créer une réference client partant de 1

Offline


C'est en principe expliqué dans le readme du plugin .


OpenStudio Toulouse

Offline


Ah ok je re relis j'ai du louper un truc

le readme dit :

Si vous ne souhaitez pas la modifier, il suffit de retourner $client->ref.

generer_numero_commande($commande) doit retourner la référence de la commande.


mais si on veut la modifier ?

Last edited by lolo17600 (11-06-2013 14:11:42)

Offline


Hé bien on code, sur le modèle de ce qui est détaillé dans le readme.


OpenStudio Toulouse

Offline


ok merci roadster

Offline


voilà ce que j'ia fait et pourtant mes numéros reste ceux de base (thélia 1.5.4.1 en local) :

function init()
    {
					
		$this->ajout_desc(
                "referencesperso",
                "Plugin Références Perso",
                "Ce plugin permet de générer vos propres références de client, de commande et de livraisons.",
                1);
		$this->create_variable('prochain_numero_facture', 1000, 0);
		$this->create_variable('prochain_numero_commande', 1000, 0);
		$this->create_variable('prochain_numero_client', 1000, 0);
	}

    function destroy()
    {
		$this->delete_variable('prochain_numero_facture');
		$this->delete_variable('prochain_numero_commande');
		$this->delete_variable('prochain_numero_client');
    }

Offline


Ca ne suffit pas, parce que la magie n'existe pas.

Il faut que tu écrives la méthode generer_numero_client(), comme indiqué dans la documentation du plugin. Une dernière fois, inspire-toi de ce qui a été fait pour le numéro de facture (toujours dans la doc). A part écrire le code à ta place, je ne vois pas ce que je peux faire de plus.


OpenStudio Toulouse

Offline


je viens de rajouter celà et rien grrrrrrrrr!

// -- Fonctions spécifiques ------------------------------------------------

     private function generer_numero_facture($commande)
    {
    	// Récupérer le numéro de facture
	   $num = intval($this->get_variable('prochain_numero_facture'));
			
	   // Incrémenter le numéro de facture
	   $this->set_variable('prochain_numero_facture', $num + 1);
	   // Gérer la référence de notre facture
	   return 'F-' . sprintf('%04d', $num);
    }
   
    private function generer_numero_commande($commande)
    {
    	// Récupérer le numéro de commande
	   $num = intval($this->get_variable('prochain_numero_commande'));
			
	   // Incrémenter le numéro de commande
	   $this->set_variable('prochain_numero_commande', $num + 1);
	   // Gérer la référence de notre commande
	   return 'C-' . sprintf('%04d', $num);
    }
    
    private function generer_numero_livraison($commande)
    {
    	return $commande->livraison;
    }

    private function generer_numero_client($client)
    {
    	// Récupérer le numéro de facture
	   $num = intval($this->get_variable('prochain_numero_client'));
			
	   // Incrémenter le numéro de facture
	   $this->set_variable('prochain_numero_client', $num + 1);
	   // Gérer la référence de notre facture
	   return 'F-' . sprintf('%04d', $num);
    }
    }

Offline


Arfffff je suis bloqué ; j'ai lu et relu et je coince tjrs !!


Une ligne il me manquait une ligne ! et j'ai enfin trouvé ! merci roadster pour ce plugin et ta patience !

Last edited by lolo17600 (13-06-2013 16:25:24)

Offline

Offline


Bonjour,

question bête, en partie en rapport avec ce plugins, le changement de numéro de facture n'impacte que le champ "facture" de la table commande ?