Fix: Amélioration de la gestion du code client et code fournisseur:

- Ajout aide sur le champ de saisi.
- Uniformisation du code.
- Ajout d'un module Lion pour controler que les codes sont numériques (sera utilisé pour générer code compta)
This commit is contained in:
Laurent Destailleur 2007-01-28 22:11:42 +00:00
parent 141fd1e285
commit b773ab0a9d
10 changed files with 736 additions and 364 deletions

View File

@ -320,7 +320,7 @@ class Conf
// societe // societe
if (! $this->global->SOCIETE_CODECLIENT_ADDON) $this->global->SOCIETE_CODECLIENT_ADDON="mod_codeclient_leopard"; if (! $this->global->SOCIETE_CODECLIENT_ADDON) $this->global->SOCIETE_CODECLIENT_ADDON="mod_codeclient_leopard";
if (! $this->global->SOCIETE_CODEFOURNISSEUR_ADDON) $this->global->SOCIETE_CODEFOURNISSEUR_ADDON="mod_codeclient_leopard"; if (! $this->global->SOCIETE_CODEFOURNISSEUR_ADDON) $this->global->SOCIETE_CODEFOURNISSEUR_ADDON=$this->global->SOCIETE_CODECLIENT_ADDON;
if (! $this->global->SOCIETE_CODECOMPTA_ADDON) $this->global->SOCIETE_CODECOMPTA_ADDON="mod_codecompta_panicum"; if (! $this->global->SOCIETE_CODECOMPTA_ADDON) $this->global->SOCIETE_CODECOMPTA_ADDON="mod_codecompta_panicum";
// Pour compatibilite ascendante: // Pour compatibilite ascendante:
if ($this->global->CODECLIENT_ADDON) $this->global->SOCIETE_CODECLIENT_ADDON=$this->global->CODECLIENT_ADDON; if ($this->global->CODECLIENT_ADDON) $this->global->SOCIETE_CODECLIENT_ADDON=$this->global->CODECLIENT_ADDON;

View File

@ -1,6 +1,6 @@
<?php <?php
/* Copyright (C) 2004 Rodolphe Quiedeville <rodolphe@quiedeville.org> /* Copyright (C) 2004 Rodolphe Quiedeville <rodolphe@quiedeville.org>
* Copyright (C) 2006 Laurent Destailleur <eldy@users.sourceforge.net> * Copyright (C) 2006-2007 Laurent Destailleur <eldy@users.sourceforge.net>
* *
* This program is free software; you can redistribute it and/or modify * This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by * it under the terms of the GNU General Public License as published by
@ -30,7 +30,6 @@
require_once(DOL_DOCUMENT_ROOT."/includes/modules/societe/modules_societe.class.php"); require_once(DOL_DOCUMENT_ROOT."/includes/modules/societe/modules_societe.class.php");
/** /**
\class mod_codeclient_leopard \class mod_codeclient_leopard
\brief Classe permettant la gestion leopard des codes tiers \brief Classe permettant la gestion leopard des codes tiers
@ -38,39 +37,56 @@ require_once(DOL_DOCUMENT_ROOT."/includes/modules/societe/modules_societe.class.
class mod_codeclient_leopard extends ModeleThirdPartyCode class mod_codeclient_leopard extends ModeleThirdPartyCode
{ {
/*
* Attention ce module est utilisé par défaut si aucun module n'a
* été définit dans la configuration
*
* Le fonctionnement de celui-ci doit dont rester le plus ouvert
* possible
*/
/* var $nom; // Nom du modele
* Attention ce module est utilisé par défaut si aucun module n'a var $code_modifiable; // Code modifiable
* été définit dans la configuration var $code_modifiable_invalide; // Code modifiable si il est invalide
* var $code_modifiable_null; // Code modifiables si il est null
* Le fonctionnement de celui-ci doit dont rester le plus ouvert var $code_null; // Code facultatif
* possible
*/
function mod_codeclient_leopard()
{
$this->nom = "Léopard";
$this->code_modifiable = 1;
$this->code_modifiable_invalide = 1; // code modifiable si il est invalide
$this->code_modifiable_null = 1; // code modifiable si il est null
$this->code_null = 1;
} /** \brief Constructeur classe
*/
function mod_codeclient_leopard()
{
$this->nom = "Léopard";
$this->code_modifiable = 1;
$this->code_modifiable_invalide = 1;
$this->code_modifiable_null = 1;
$this->code_null = 1;
}
function info($langs)
{
return "Renvoie toujours ok, pour ceux qui ne veulent pas faire de test.";
}
function verif($db, $code) /**
{ * \brief Renvoie la description du module
// Renvoie toujours ok * \return string Texte descripif
return 0; */
} function info($langs)
{
return "Renvoie toujours ok, pour ceux qui ne veulent pas faire de test.";
}
/**
* \brief Vérifie la validité du code
* \param $db Handler acces base
* \param $code Code a vérifier
* \param $soc Objet societe
*/
function verif($db, $code, $soc)
{
$code = strtoupper(trim($code));
// Renvoie toujours ok
return 0;
}
} }
?> ?>

View File

@ -0,0 +1,221 @@
<?php
/* Copyright (C) 2004 Rodolphe Quiedeville <rodolphe@quiedeville.org>
* Copyright (C) 2006-2007 Laurent Destailleur <eldy@users.sourceforge.net>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
* or see http://www.gnu.org/
*
* $Id$
* $Source$
*/
/**
\file htdocs/includes/modules/societe/mod_codeclient_lion.class.php
\ingroup societe
\brief Fichier de la classe des gestion lion des codes clients
\version $Revision$
*/
require_once(DOL_DOCUMENT_ROOT."/includes/modules/societe/modules_societe.class.php");
/**
\class mod_codeclient_lion
\brief Classe permettant la gestion lion des codes tiers
*/
class mod_codeclient_lion extends ModeleThirdPartyCode
{
var $nom; // Nom du modele
var $code_modifiable; // Code modifiable
var $code_modifiable_invalide; // Code modifiable si il est invalide
var $code_modifiable_null; // Code modifiables si il est null
var $code_null; // Code facultatif
/** \brief Constructeur classe
*/
function mod_codeclient_lion()
{
$this->nom = "Lion";
$this->code_modifiable = 0;
$this->code_modifiable_invalide = 0;
$this->code_modifiable_null = 1;
$this->code_null = 0;
}
/** \brief Renvoi la description du module
* \return string Texte descripif
*/
function info($langs)
{
return "Vérifie si le code client est de la forme numérique 999 et sur au moins 3 chiffres.";
}
/** \brief Renvoi la description du module
* \return string Texte descripif
*/
function getExample($langs)
{
return "001";
}
/**
* \brief Vérifie la validité du code
* \param $db Handler acces base
* \param $code Code a vérifier/corriger
* \param $soc Objet societe
* \return int <0 si ko
*/
function verif($db, &$code, $soc)
{
$code = strtoupper(trim($code));
if ($this->verif_syntax($code) == 0)
{
$is_dispo = $this->verif_dispo($db, $code);
if ($is_dispo <> 0)
{
return -3;
}
}
else
{
if (strlen($code) == 0)
{
return -2;
}
else
{
return -1;
}
}
}
/**
* \brief Renvoi une valeur correcte
* \param $db Handler acces base
* \param $code Code reference eventuel
* \return string Code correct
*/
function get_correct($db,$code)
{
$return='001';
$sql = "SELECT MAX(code_client) as maxval FROM ".MAIN_DB_PREFIX."societe";
$resql=$db->query($sql);
if ($resql)
{
$obj=$db->fetch_object($resql);
if ($obj)
{
$newval=$obj->maxval+1;
$return=sprintf('%03d',$newval);
return $return;
}
}
else
{
return -1;
}
}
/**
* \brief Renvoi si un code est pris ou non
* \param $db Handler acces base
* \param $code Code a verifier
* \return int 0 si dispo, <0 si erreur
*/
function verif_dispo($db, $code)
{
$sql = "SELECT code_client FROM ".MAIN_DB_PREFIX."societe";
$sql .= " WHERE code_client = '".$code."'";
$resql=$db->query($sql);
if ($resql)
{
if ($db->num_rows() == 0)
{
return 0;
}
else
{
return -1;
}
}
else
{
return -2;
}
}
/**
* \brief Renvoi si un code respecte la syntaxe
* \return int 0 si dispo, <0 si erreur
*/
function verif_syntax($code)
{
$res = 0;
if (strlen($code) < 3)
{
$res = -1;
}
else
{
if (eregi('[0-9][0-9][0-9]+',$code))
{
$res = 0;
}
else
{
$res = -2;
}
}
return $res;
}
/**
* Renvoi 0 si numerique, sinon renvoi nb de car non numerique
*/
function is_num($str)
{
$ok = 0;
$alpha = '0123456789';
for ($i = 0 ; $i < length($str) ; $i++)
{
if (strpos($alpha, substr($str,$i, 1)) === false)
{
$ok++;
}
}
return $ok;
}
}
?>

View File

@ -1,6 +1,6 @@
<?php <?php
/* Copyright (C) 2004 Rodolphe Quiedeville <rodolphe@quiedeville.org> /* Copyright (C) 2004 Rodolphe Quiedeville <rodolphe@quiedeville.org>
* Copyright (C) 2006 Laurent Destailleur <eldy@users.sourceforge.net> * Copyright (C) 2006-2007 Laurent Destailleur <eldy@users.sourceforge.net>
* *
* This program is free software; you can redistribute it and/or modify * This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by * it under the terms of the GNU General Public License as published by
@ -35,193 +35,223 @@ require_once(DOL_DOCUMENT_ROOT."/includes/modules/societe/modules_societe.class.
\class mod_codeclient_zebre \class mod_codeclient_zebre
\brief Classe permettant la gestion zebre des codes tiers \brief Classe permettant la gestion zebre des codes tiers
*/ */
class mod_codeclient_zebre extends ModeleThirdPartyCode class mod_codeclient_zebre extends ModeleThirdPartyCode
{ {
var $nom; // Nom du modele
var $code_modifiable; // Code modifiable
var $code_modifiable_invalide; // Code modifiable si il est invalide
var $code_modifiable_null; // Code modifiables si il est null
var $code_null; // Code facultatif
function mod_codeclient_zebre()
{
$this->nom = "Zèbre";
$this->code_modifiable = 0; // code modifiable /** \brief Constructeur classe
*/
$this->code_modifiable_invalide = 0; // code modifiable si il est invalide function mod_codeclient_zebre()
$this->code_modifiable_null = 1; // code modifiable si il est null
$this->code_null = 0; // Saisi vide interdite
}
/*! \brief Renvoi la description du module
* \return string Texte descripif
*/
function info($langs)
{
return "Vérifie si le code client est de la forme ABCD5600. Les quatres premières lettres étant une représentation mnémotechnique, suivi du code postal en 2 chiffres et un numéro d'ordre pour la prise en compte des doublons.";
}
/**
* Vérifie la validité du code
*
*
*/
function verif($db, &$code, $socid=0)
{
$code = strtoupper(trim($code));
if ($this->verif_syntax($code) == 0)
{ {
$i = 1; $this->nom = "Zèbre";
$this->code_modifiable = 0;
$is_dispo = $this->verif_dispo($db, $code, $socid); $this->code_modifiable_invalide = 0;
$this->code_modifiable_null = 1;
while ( $is_dispo <> 0 && $i < 99) $this->code_null = 0;
{
$arr = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
$code = substr($code,0,6) . substr("00".$i, -2);
$is_dispo = $this->verif_dispo($db, $code);
$i++;
}
if ($is_dispo <> 0)
{
return -3;
}
}
else
{
if (strlen(trim($code)) == 0)
{
return -2;
}
else
{
return -1;
}
}
}
function get_correct($db, &$code)
{
$code = strtoupper(trim($code));
if ($this->verif_syntax($code) == 0)
{
$i = 1;
$is_dispo = $this->verif_dispo($db, $code);
while ( $is_dispo <> 0 && $i < 99)
{
$arr = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
$code = substr($code,0,6) . substr("00".$i, -2);
$is_dispo = $this->verif_dispo($db, $code);
$i++;
}
return $is_dispo;
}
else
{
return -1;
} }
}
function verif_dispo($db, $code) /**
{ * \brief Renvoie la description du module
$code = strtoupper(trim($code)); * \return string Texte descripif
*/
$sql = "SELECT code_client FROM ".MAIN_DB_PREFIX."societe"; function info($langs)
$sql .= " WHERE code_client = '".$code."'";
if ($db->query($sql))
{
if ($db->num_rows() == 0)
{
return 0;
}
else
{
return -1;
}
}
else
{
return -2;
}
}
function verif_syntax(&$code)
{
$res = 0;
$code = strtoupper(trim($code));
if (strlen($code) <> 8)
{
$res = -1;
}
else
{
if ($this->is_alpha(substr($code,0,4)) == 0 && $this->is_num(substr($code,4,4)) == 0 )
{
$res = 0;
}
else
{
$res = -2;
}
}
return $res;
}
function is_alpha($str)
{
$ok = 0;
// Je n'ai pas trouvé de fonction pour tester une chaine alpha sans les caractère accentués
// dommage
$alpha = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';
for ($i = 0 ; $i < 4 ; $i++)
{
if (strpos($alpha, substr($str,$i, 1)) === false)
{ {
$ok++; return "Vérifie si le code client est de la forme CCCC9999. Les quatres premières lettres étant une représentation mnémotechnique, suivi du code postal en 2 chiffres et un numéro d'ordre pour la prise en compte des doublons.";
} }
}
return $ok;
}
function is_num($str) /** \brief Renvoi la description du module
{ * \return string Texte descripif
$ok = 0; */
function getExample($langs)
$alpha = '0123456789';
for ($i = 0 ; $i < 4 ; $i++)
{
if (strpos($alpha, substr($str,$i, 1)) === false)
{ {
$ok++; return "ABCD7501";
} }
}
return $ok;
} /**
* \brief Vérifie la validité du code
* \param $db Handler acces base
* \param $code Code a vérifier/corriger
* \param $soc Objet societe
*/
function verif($db, &$code, $soc)
{
$code = strtoupper(trim($code));
if ($this->verif_syntax($code) == 0)
{
$i = 1;
$is_dispo = $this->verif_dispo($db, $code);
while ($is_dispo <> 0 && $i < 99)
{
$arr = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
$code = substr($code,0,6) . substr("00".$i, -2);
$is_dispo = $this->verif_dispo($db, $code);
$i++;
}
if ($is_dispo <> 0)
{
return -3;
}
}
else
{
if (strlen(trim($code)) == 0)
{
return -2;
}
else
{
return -1;
}
}
}
/**
* \brief Renvoi une valeur correcte
* \param $db Handler acces base
* \param $code Code reference eventuel
* \return string Code correcte
*/
function get_correct($db, $code)
{
if ($this->verif_syntax($code) == 0)
{
$i = 1;
$is_dispo = $this->verif_dispo($db, $code);
while ( $is_dispo <> 0 && $i < 99)
{
$arr = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
$code = substr($code,0,6) . substr("00".$i, -2);
$is_dispo = $this->verif_dispo($db, $code);
$i++;
}
return $is_dispo;
}
else
{
return -1;
}
}
/**
* \brief Renvoi si un code est pris ou non
* \param $db Handler acces base
* \param $code Code a verifier
* \return int 0 si dispo, <0 si erreur
*/
function verif_dispo($db, $code)
{
$sql = "SELECT code_client FROM ".MAIN_DB_PREFIX."societe";
$sql .= " WHERE code_client = '".$code."'";
if ($db->query($sql))
{
if ($db->num_rows() == 0)
{
return 0;
}
else
{
return -1;
}
}
else
{
if (strlen($code) == 0)
{
return -2;
}
else
{
return -1;
}
}
}
function verif_syntax(&$code)
{
$res = 0;
if (strlen($code) <> 8)
{
$res = -1;
}
else
{
if ($this->is_alpha(substr($code,0,4)) == 0 && $this->is_num(substr($code,4,4)) == 0 )
{
$res = 0;
}
else
{
$res = -2;
}
}
return $res;
}
function is_alpha($str)
{
$ok = 0;
// Je n'ai pas trouvé de fonction pour tester une chaine alpha sans les caractère accentués
// dommage
$alpha = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';
for ($i = 0 ; $i < 4 ; $i++)
{
if (strpos($alpha, substr($str,$i, 1)) === false)
{
$ok++;
}
}
return $ok;
}
function is_num($str)
{
$ok = 0;
$alpha = '0123456789';
for ($i = 0 ; $i < 4 ; $i++)
{
if (strpos($alpha, substr($str,$i, 1)) === false)
{
$ok++;
}
}
return $ok;
}
} }

View File

@ -49,6 +49,15 @@ class ModeleThirdPartyCode
return $langs->trans("NoDescription"); return $langs->trans("NoDescription");
} }
/** \brief Renvoi nom module
* \return string Nom du module
*/
function getNom($langs)
{
return $this->nom;
}
/** \brief Renvoi un exemple de numérotation /** \brief Renvoi un exemple de numérotation
* \return string Example * \return string Example
*/ */

View File

@ -114,6 +114,11 @@ CustomerCode=Customer code
SupplierCode=Supplier code SupplierCode=Supplier code
CustomerAccount=Customer account CustomerAccount=Customer account
SupplierAccount=Supplier account SupplierAccount=Supplier account
CustomerCodeDesc=Customer code, unique for all customers
SupplierCodeDesc=Supplier code, unique for all suppliers
RequiredIfCustomer=Required if third party is a customer or prospect
RequiredIfSupplier=Required if third party is a supplier
ValidityControledByModule=Validity controled by module
LastProspect=Last LastProspect=Last
ProspectToContact=Prospect to contact ProspectToContact=Prospect to contact
CompanyDeleted=Company "%s" deleted from database. CompanyDeleted=Company "%s" deleted from database.

View File

@ -114,6 +114,11 @@ CustomerCode=Code client
SupplierCode=Code fournisseur SupplierCode=Code fournisseur
CustomerAccount=Compte client CustomerAccount=Compte client
SupplierAccount=Compte fournisseur SupplierAccount=Compte fournisseur
CustomerCodeDesc=Code client unique pour chaque client
SupplierCodeDesc=Code fournisseur unique pour chaque fournisseur
RequiredIfCustomer=Requis si tiers est un client ou prospect
RequiredIfSupplier=Requis si tiers est un fournisseur
ValidityControledByModule=Validité controlée par le module
LastProspect=Dernier prospect LastProspect=Dernier prospect
ProspectToContact=Prospect à contacter ProspectToContact=Prospect à contacter
CompanyDeleted=La société "%s" a été supprimée de la base. CompanyDeleted=La société "%s" a été supprimée de la base.

View File

@ -93,3 +93,11 @@ BlankSubscriptionForm=Formulaire inscription
MemberPublicLinks=Liens/pages publiques MemberPublicLinks=Liens/pages publiques
ExportDataset_member_1=Adhérentes et attributs ExportDataset_member_1=Adhérentes et attributs
LastMembers=Les %s derniers adhérents LastMembers=Les %s derniers adhérents
AttributeName=Nom de l'attribut
FieldEdition=Édition du champ %s
AlphaNumOnlyCharsAndNoSpace=uniquement caratères alphanumeriques sans espace
String=Chaîne
Text=Texte long
Int=Numérique
Date=Date
DateAndTime=Date et heure

View File

@ -1,7 +1,7 @@
<?php <?php
/* Copyright (C) 2001-2007 Rodolphe Quiedeville <rodolphe@quiedeville.org> /* Copyright (C) 2001-2007 Rodolphe Quiedeville <rodolphe@quiedeville.org>
* Copyright (C) 2003 Brian Fraval <brian@fraval.org> * Copyright (C) 2003 Brian Fraval <brian@fraval.org>
* Copyright (C) 2004-2006 Laurent Destailleur <eldy@users.sourceforge.net> * Copyright (C) 2004-2007 Laurent Destailleur <eldy@users.sourceforge.net>
* Copyright (C) 2005 Eric Seigne <eric.seigne@ryxeo.com> * Copyright (C) 2005 Eric Seigne <eric.seigne@ryxeo.com>
* Copyright (C) 2005-2006 Regis Houssin <regis.houssin@cap-networks.com> * Copyright (C) 2005-2006 Regis Houssin <regis.houssin@cap-networks.com>
* *
@ -74,6 +74,7 @@ if (!$user->rights->commercial->client->voir && $socid && !$user->societe_id > 0
// Initialisation de l'objet Societe // Initialisation de l'objet Societe
$soc = new Societe($db); $soc = new Societe($db);
/* /*
* Actions * Actions
*/ */
@ -93,90 +94,93 @@ if ($_POST["getsuppliercode"])
if ((! $_POST["getcustomercode"] && ! $_POST["getsuppliercode"]) if ((! $_POST["getcustomercode"] && ! $_POST["getsuppliercode"])
&& ($_POST["action"] == 'add' || $_POST["action"] == 'update') && $user->rights->societe->creer) && ($_POST["action"] == 'add' || $_POST["action"] == 'update') && $user->rights->societe->creer)
{ {
$soc->nom = $_POST["nom"]; $soc->nom = $_POST["nom"];
$soc->adresse = $_POST["adresse"]; $soc->adresse = $_POST["adresse"];
$soc->cp = $_POST["cp"]; $soc->cp = $_POST["cp"];
$soc->ville = $_POST["ville"]; $soc->ville = $_POST["ville"];
$soc->pays_id = $_POST["pays_id"]; $soc->pays_id = $_POST["pays_id"];
$soc->departement_id = $_POST["departement_id"]; $soc->departement_id = $_POST["departement_id"];
$soc->tel = $_POST["tel"]; $soc->tel = $_POST["tel"];
$soc->fax = $_POST["fax"]; $soc->fax = $_POST["fax"];
$soc->email = $_POST["email"]; $soc->email = $_POST["email"];
$soc->url = $_POST["url"]; $soc->url = $_POST["url"];
$soc->siren = $_POST["siren"]; $soc->siren = $_POST["siren"];
$soc->siret = $_POST["siret"]; $soc->siret = $_POST["siret"];
$soc->ape = $_POST["ape"]; $soc->ape = $_POST["ape"];
$soc->prefix_comm = $_POST["prefix_comm"]; $soc->prefix_comm = $_POST["prefix_comm"];
$soc->code_client = $_POST["code_client"]; $soc->code_client = $_POST["code_client"];
$soc->code_fournisseur = $_POST["code_fournisseur"]; $soc->code_fournisseur = $_POST["code_fournisseur"];
$soc->codeclient_modifiable = $_POST["codeclient_modifiable"]; $soc->codeclient_modifiable = $_POST["codeclient_modifiable"];
$soc->codefournisseur_modifiable = $_POST["codefournisseur_modifiable"]; $soc->codefournisseur_modifiable = $_POST["codefournisseur_modifiable"];
$soc->capital = $_POST["capital"]; $soc->capital = $_POST["capital"];
$soc->tva_assuj = $_POST["assujtva_value"]; $soc->tva_assuj = $_POST["assujtva_value"];
$soc->tva_intra_code = $_POST["tva_intra_code"]; $soc->tva_intra_code = $_POST["tva_intra_code"];
$soc->tva_intra_num = $_POST["tva_intra_num"]; $soc->tva_intra_num = $_POST["tva_intra_num"];
$soc->tva_intra = $_POST["tva_intra_code"] . $_POST["tva_intra_num"]; $soc->tva_intra = $_POST["tva_intra_code"] . $_POST["tva_intra_num"];
$soc->forme_juridique_code = $_POST["forme_juridique_code"]; $soc->forme_juridique_code = $_POST["forme_juridique_code"];
$soc->effectif_id = $_POST["effectif_id"]; $soc->effectif_id = $_POST["effectif_id"];
$soc->typent_id = $_POST["typent_id"]; $soc->typent_id = $_POST["typent_id"];
$soc->client = $_POST["client"]; $soc->client = $_POST["client"];
$soc->fournisseur = $_POST["fournisseur"]; $soc->fournisseur = $_POST["fournisseur"];
$soc->fournisseur_categorie = $_POST["fournisseur_categorie"]; $soc->fournisseur_categorie = $_POST["fournisseur_categorie"];
if ($_POST["action"] == 'add') if ($_POST["action"] == 'add')
{
$result = $soc->create($user);
if ($result >= 0)
{
if ( $soc->client == 1 )
{
Header("Location: comm/fiche.php?socid=".$soc->id);
}
else
{
if ( $soc->fournisseur == 1 )
{
Header("Location: fourn/fiche.php?socid=".$soc->id);
}
else
{
Header("Location: soc.php?socid=".$soc->id);
}
}
exit;
}
else
{
$mesg=$soc->error;
$_GET["action"]='create';
}
}
if ($_POST["action"] == 'update')
{
if ($_POST["cancel"])
{
Header("Location: soc.php?socid=".$socid);
exit;
}
$result = $soc->update($socid,$user);
if ($result >= 0)
{
Header("Location: soc.php?socid=".$socid);
exit;
}
else
{ {
$soc->id = $socid; $result = $soc->create($user);
$reload = 0;
$mesg = $soc->error; if ($result >= 0)
$_GET["action"]= "edit"; {
} if ( $soc->client == 1 )
} {
Header("Location: comm/fiche.php?socid=".$soc->id);
return;
}
else
{
if ( $soc->fournisseur == 1 )
{
Header("Location: fourn/fiche.php?socid=".$soc->id);
return;
}
else
{
Header("Location: soc.php?socid=".$soc->id);
return;
}
}
exit;
}
else
{
$mesg=$soc->error;
$_GET["action"]='create';
}
}
if ($_POST["action"] == 'update')
{
if ($_POST["cancel"])
{
Header("Location: soc.php?socid=".$socid);
exit;
}
$result = $soc->update($socid,$user);
if ($result >= 0)
{
Header("Location: soc.php?socid=".$socid);
exit;
}
else
{
$soc->id = $socid;
$reload = 0;
$mesg = $soc->error;
$_GET["action"]= "edit";
}
}
} }
@ -214,13 +218,32 @@ $countrynotdefined=$langs->trans("ErrorSetACountryFirst").' ('.$langs->trans("Se
if ($_POST["getcustomercode"] || $_POST["getsuppliercode"] || if ($_POST["getcustomercode"] || $_POST["getsuppliercode"] ||
$_GET["action"] == 'create' || $_POST["action"] == 'create') $_GET["action"] == 'create' || $_POST["action"] == 'create')
{ {
/*
* Fiche en mode creation
*/
if ($user->rights->societe->creer) if ($user->rights->societe->creer)
{ {
/* // Charge objet modCodeTiers
$module=$conf->global->SOCIETE_CODECLIENT_ADDON;
if (! $module) dolibarr_error('',$langs->trans("ErrorModuleThirdPartyCodeInCompanyModuleNotDefined"));
if (substr($module, 0, 15) == 'mod_codeclient_' && substr($module, -3) == 'php')
{
$module = substr($module, 0, strlen($module)-4);
}
require_once(DOL_DOCUMENT_ROOT ."/includes/modules/societe/".$module.".php");
$modCodeClient = new $module;
$module=$conf->global->SOCIETE_CODEFOURNISSEUR_ADDON;
if (! $module) $module=$conf->global->SOCIETE_CODECLIENT_ADDON;
if (substr($module, 0, 15) == 'mod_codeclient_' && substr($module, -3) == 'php')
{
$module = substr($module, 0, strlen($module)-4);
}
require_once(DOL_DOCUMENT_ROOT ."/includes/modules/societe/".$module.".php");
$modCodeFournisseur = new $module;
/*
* Fiche societe en mode création * Fiche societe en mode création
*/ */
$soc->fournisseur=0;
$soc->fournisseur_categorie = 0;
if ($_GET["type"]=='f') { $soc->fournisseur=1; } if ($_GET["type"]=='f') { $soc->fournisseur=1; }
if ($_GET["type"]=='c') { $soc->client=1; } if ($_GET["type"]=='c') { $soc->client=1; }
if ($_GET["type"]=='p') { $soc->client=2; } if ($_GET["type"]=='p') { $soc->client=2; }
@ -247,7 +270,7 @@ if ($_POST["getcustomercode"] || $_POST["getsuppliercode"] ||
$soc->typent_id=$_POST["typent_id"]; $soc->typent_id=$_POST["typent_id"];
$soc->effectif_id=$_POST["effectif_id"]; $soc->effectif_id=$_POST["effectif_id"];
$soc->tva_assuj = $_POST["assujtva_value"]; $soc->tva_assuj = $_POST["assujtva_value"];
$soc->tva_intra_code=$_POST["tva_intra_code"]; $soc->tva_intra_code=$_POST["tva_intra_code"];
$soc->tva_intra_num=$_POST["tva_intra_num"]; $soc->tva_intra_num=$_POST["tva_intra_num"];
} }
@ -297,11 +320,18 @@ if ($_POST["getcustomercode"] || $_POST["getsuppliercode"] ||
print '<option value="1"'.($soc->client==1?' selected="true"':'').'>'.$langs->trans('Customer').'</option>'; print '<option value="1"'.($soc->client==1?' selected="true"':'').'>'.$langs->trans('Customer').'</option>';
print '<option value="0"'.($soc->client==0?' selected="true"':'').'>Ni client, ni prospect</option>'; print '<option value="0"'.($soc->client==0?' selected="true"':'').'>Ni client, ni prospect</option>';
print '</select></td>'; print '</select></td>';
print '<td width="25%">'.$langs->trans('CustomerCode').'</td><td width="25%">'; print '<td width="25%">'.$langs->trans('CustomerCode').'</td><td width="25%">';
print '<table class="noborder"><tr><td>'; print '<table class="nobordernopadding"><tr><td>';
print '<input type="text" name="code_client" size="16" value="'.$soc->code_client.'" maxlength="15"></td><td>'; print '<input type="text" name="code_client" size="16" value="'.$soc->code_client.'" maxlength="15">';
//print '<input type="image" name="getcustomercode" value="1" src="'.DOL_URL_ROOT.'/theme/'.$conf->theme.'/img/refresh.png" class="noborder">'; print '</td><td>';
$s=$langs->trans("CustomerCodeDesc").'<br>';
$s.=$langs->trans("ValidityControledByModule").': <b>'.$modCodeClient->getNom($langs).'</b><br>';
$s.=$langs->trans("RequiredIfCustomer").': <b>'.yn(!$modCodeClient->code_null).'</b><br>';
$s.=$langs->trans("Example").': <b>'.$modCodeClient->getExample($langs).'</b>';
print $form->textwithhelp('',$s,1);
print '</td></tr></table>'; print '</td></tr></table>';
print '</td></tr>'; print '</td></tr>';
// Fournisseur // Fournisseur
@ -310,27 +340,33 @@ if ($_POST["getcustomercode"] || $_POST["getsuppliercode"] ||
$form->selectyesnonum("fournisseur",$soc->fournisseur); $form->selectyesnonum("fournisseur",$soc->fournisseur);
print '</td>'; print '</td>';
print '<td>'.$langs->trans('SupplierCode').'</td><td>'; print '<td>'.$langs->trans('SupplierCode').'</td><td>';
//print '<table class="noborder"><tr><td>';
print '<table class="nobordernopadding"><tr><td>';
print '<input type="text" name="code_fournisseur" size="16" value="'.$soc->code_fournisseur.'" maxlength="15">'; print '<input type="text" name="code_fournisseur" size="16" value="'.$soc->code_fournisseur.'" maxlength="15">';
//print '</td><td>'; print '</td><td>';
//print '<input type="image" name="getsuppliercode" value="1" src="'.DOL_URL_ROOT.'/theme/'.$conf->theme.'/img/refresh.png" class="noborder">'; $s=$langs->trans("SupplierCodeDesc").'<br>';
//print '</td></tr></table>'; $s.=$langs->trans("ValidityControledByModule").': <b>'.$modCodeFournisseur->getNom($langs).'</b><br>';
$s.=$langs->trans("RequiredIfSupplier").': <b>'.yn(!$modCodeFournisseur->code_null).'</b><br>';
$s.=$langs->trans("Example").': <b>'.$modCodeFournisseur->getExample($langs).'</b>';
print $form->textwithhelp('',$s,1);
print '</td></tr></table>';
print '</td></tr>'; print '</td></tr>';
if ($soc->fournisseur) if ($soc->fournisseur)
{ {
$load = $soc->LoadSupplierCateg(); $load = $soc->LoadSupplierCateg();
if ( $load == 0) if ( $load == 0)
{ {
if (sizeof($soc->SupplierCategories) > 0) if (sizeof($soc->SupplierCategories) > 0)
{ {
print '<tr>'; print '<tr>';
print '<td>'.$langs->trans('SupplierCategory').'</td><td colspan="3">'; print '<td>'.$langs->trans('SupplierCategory').'</td><td colspan="3">';
$form->select_array("fournisseur_categorie",$soc->SupplierCategories); $form->select_array("fournisseur_categorie",$soc->SupplierCategories);
print '</td></tr>'; print '</td></tr>';
} }
} }
} }
print '<tr><td>'.$langs->trans('Address').'</td><td colspan="3"><textarea name="adresse" cols="40" rows="3" wrap="soft">'; print '<tr><td>'.$langs->trans('Address').'</td><td colspan="3"><textarea name="adresse" cols="40" rows="3" wrap="soft">';
print $soc->adresse; print $soc->adresse;
@ -474,12 +510,29 @@ elseif ($_GET["action"] == 'edit' || $_POST["action"] == 'edit')
/* /*
* Fiche societe en mode edition * Fiche societe en mode edition
*/ */
print_titre($langs->trans("EditCompany")); print_titre($langs->trans("EditCompany"));
if ($socid) if ($socid)
{ {
if ($reload || ! $_POST["nom"]) // Charge objet modCodeTiers
$module=$conf->global->SOCIETE_CODECLIENT_ADDON;
if (! $module) dolibarr_error('',$langs->trans("ErrorModuleThirdPartyCodeInCompanyModuleNotDefined"));
if (substr($module, 0, 15) == 'mod_codeclient_' && substr($module, -3) == 'php')
{
$module = substr($module, 0, strlen($module)-4);
}
require_once(DOL_DOCUMENT_ROOT ."/includes/modules/societe/".$module.".php");
$modCodeClient = new $module;
$module=$conf->global->SOCIETE_CODEFOURNISSEUR_ADDON;
if (! $module) $module=$conf->global->SOCIETE_CODECLIENT_ADDON;
if (substr($module, 0, 15) == 'mod_codeclient_' && substr($module, -3) == 'php')
{
$module = substr($module, 0, strlen($module)-4);
}
require_once(DOL_DOCUMENT_ROOT ."/includes/modules/societe/".$module.".php");
$modCodeFournisseur = new $module;
if ($reload || ! $_POST["nom"])
{ {
$soc = new Societe($db); $soc = new Societe($db);
$soc->id = $socid; $soc->id = $socid;
@ -560,6 +613,8 @@ elseif ($_GET["action"] == 'edit' || $_POST["action"] == 'edit')
print '<option value="0"'.($soc->client==0?' selected="true"':'').'>Ni client, ni prospect</option>'; print '<option value="0"'.($soc->client==0?' selected="true"':'').'>Ni client, ni prospect</option>';
print '</select></td>'; print '</select></td>';
print '<td width="25%">'.$langs->trans('CustomerCode').'</td><td width="25%">'; print '<td width="25%">'.$langs->trans('CustomerCode').'</td><td width="25%">';
print '<table class="nobordernopadding"><tr><td>';
if ($soc->codeclient_modifiable == 1) if ($soc->codeclient_modifiable == 1)
{ {
print '<input type="text" name="code_client" size="16" value="'.$soc->code_client.'" maxlength="15">'; print '<input type="text" name="code_client" size="16" value="'.$soc->code_client.'" maxlength="15">';
@ -567,7 +622,16 @@ elseif ($_GET["action"] == 'edit' || $_POST["action"] == 'edit')
else else
{ {
print $soc->code_client; print $soc->code_client;
print '<input type="hidden" name="code_client" value="'.$soc->code_client.'">';
} }
print '</td><td>';
$s=$langs->trans("CustomerCodeDesc").'<br>';
$s.=$langs->trans("ValidityControledByModule").': <b>'.$modCodeClient->getNom($langs).'</b><br>';
$s.=$langs->trans("RequiredIfCustomer").': <b>'.yn(!$modCodeClient->code_null).'</b><br>';
$s.=$langs->trans("Example").': <b>'.$modCodeClient->getExample($langs).'</b>';
print $form->textwithhelp('',$s,1);
print '</td></tr></table>';
print '</td></tr>'; print '</td></tr>';
// Fournisseur // Fournisseur
@ -576,6 +640,8 @@ elseif ($_GET["action"] == 'edit' || $_POST["action"] == 'edit')
$form->selectyesnonum("fournisseur",$soc->fournisseur); $form->selectyesnonum("fournisseur",$soc->fournisseur);
print '</td>'; print '</td>';
print '<td>'.$langs->trans('SupplierCode').'</td><td>'; print '<td>'.$langs->trans('SupplierCode').'</td><td>';
print '<table class="nobordernopadding"><tr><td>';
if ($soc->codefournisseur_modifiable == 1) if ($soc->codefournisseur_modifiable == 1)
{ {
print '<input type="text" name="code_fournisseur" size="16" value="'.$soc->code_fournisseur.'" maxlength="15">'; print '<input type="text" name="code_fournisseur" size="16" value="'.$soc->code_fournisseur.'" maxlength="15">';
@ -583,7 +649,16 @@ elseif ($_GET["action"] == 'edit' || $_POST["action"] == 'edit')
else else
{ {
print $soc->code_fournisseur; print $soc->code_fournisseur;
print '<input type="hidden" name="code_fournisseur" value="'.$soc->code_fournisseur.'">';
} }
print '</td><td>';
$s=$langs->trans("SupplierCodeDesc").'<br>';
$s.=$langs->trans("ValidityControledByModule").': <b>'.$modCodeFournisseur->getNom($langs).'</b><br>';
$s.=$langs->trans("RequiredIfSupplier").': <b>'.yn(!$modCodeFournisseur->code_null).'</b><br>';
$s.=$langs->trans("Example").': <b>'.$modCodeFournisseur->getExample($langs).'</b>';
print $form->textwithhelp('',$s,1);
print '</td></tr></table>';
print '</td></tr>'; print '</td></tr>';
if ($soc->fournisseur) if ($soc->fournisseur)

View File

@ -118,15 +118,8 @@ class Societe
// definit module code fournisseur // definit module code fournisseur
$varfournisseur = $conf->global->SOCIETE_CODEFOURNISSEUR_ADDON; $varfournisseur = $conf->global->SOCIETE_CODEFOURNISSEUR_ADDON;
if ($varfournisseur == $varclient) // Optimisation require_once DOL_DOCUMENT_ROOT.'/includes/modules/societe/'.$varfournisseur.'.php';
{ $this->mod_codefournisseur = new $varfournisseur;
$this->mod_codefournisseur = $this->mod_codeclient;
}
else
{
require_once DOL_DOCUMENT_ROOT.'/includes/modules/societe/'.$varfournisseur.'.php';
$this->mod_codefournisseur = new $varfournisseur;
}
$this->codefournisseur_modifiable = $this->mod_codefournisseur->code_modifiable; $this->codefournisseur_modifiable = $this->mod_codefournisseur->code_modifiable;
return 1; return 1;
@ -145,7 +138,7 @@ class Societe
// Nettoyage paramètres // Nettoyage paramètres
$this->nom=trim($this->nom); $this->nom=trim($this->nom);
dolibarr_syslog("societe.class.php::create ".$this->nom); dolibarr_syslog("Societe::create ".$this->nom);
$this->db->begin(); $this->db->begin();
@ -171,8 +164,8 @@ class Societe
$this->add_commercial($user, $user->id); $this->add_commercial($user, $user->id);
} }
// si le fournisseur est classe on l'ajoute // si le fournisseur est classe on l'ajoute
$this->AddFournisseurInCategory($this->fournisseur_categorie); $this->AddFournisseurInCategory($this->fournisseur_categorie);
if ($ret >= 0) if ($ret >= 0)
{ {
@ -236,7 +229,7 @@ class Societe
{ {
// On ne vérifie le code client que si la société est un client / prospect et que le code est modifiable // On ne vérifie le code client que si la société est un client / prospect et que le code est modifiable
// Si il n'est pas modifiable il n'est pas mis à jour lors de l'update // Si il n'est pas modifiable il n'est pas mis à jour lors de l'update
$rescode = $this->verif_codeclient(); $rescode = $this->check_codeclient();
if ($rescode <> 0) if ($rescode <> 0)
{ {
if ($rescode == -1) if ($rescode == -1)
@ -254,6 +247,28 @@ class Societe
$result = -3; $result = -3;
} }
} }
if ($this->fournisseur && $this->codefournisseur_modifiable == 1)
{
// On ne vérifie le code fournisseur que si la société est un fournisseur et que le code est modifiable
// Si il n'est pas modifiable il n'est pas mis à jour lors de l'update
$rescode = $this->check_codefournisseur();
if ($rescode <> 0)
{
if ($rescode == -1)
{
$this->error .= "La syntaxe du code fournisseur est incorrecte.\n";
}
if ($rescode == -2)
{
$this->error .= "Vous devez saisir un code fournisseur.\n";
}
if ($rescode == -3)
{
$this->error .= "Ce code fournisseur est déjà utilisé.\n";
}
$result = -3;
}
}
return $result; return $result;
} }
@ -379,7 +394,7 @@ class Societe
$sql .= " WHERE idp = '" . $id ."'"; $sql .= " WHERE idp = '" . $id ."'";
dolibarr_syslog("Societe.class::update sql=".$sql); dolibarr_syslog("Societe::update sql=".$sql);
$resql=$this->db->query($sql); $resql=$this->db->query($sql);
if ($resql) if ($resql)
{ {
@ -1409,7 +1424,7 @@ class Societe
* \brief Verifie code client * \brief Verifie code client
* \return Renvoie 0 si ok, peut modifier le code client suivant le module utilis * \return Renvoie 0 si ok, peut modifier le code client suivant le module utilis
*/ */
function verif_codeclient() function check_codeclient()
{ {
global $conf; global $conf;
if ($conf->global->SOCIETE_CODECLIENT_ADDON) if ($conf->global->SOCIETE_CODECLIENT_ADDON)
@ -1420,26 +1435,8 @@ class Societe
$mod = new $var; $mod = new $var;
return $mod->verif($this->db, $this->code_client, $this->id); dolibarr_syslog("Societe::check_codeclient code_client=".$this->code_client." module=".$var);
} return $mod->verif($this->db, $this->code_client, $this);
else
{
return 0;
}
}
function check_codeclient()
{
if ($conf->global->SOCIETE_CODECLIENT_ADDON)
{
require_once DOL_DOCUMENT_ROOT.'/includes/modules/societe/'.$conf->global->SOCIETE_CODECLIENT_ADDON.'.php';
$var = $conf->global->SOCIETE_CODECLIENT_ADDON;
$mod = new $var;
return $mod->verif($this->db, $this->code_client);
} }
else else
{ {
@ -1447,17 +1444,23 @@ class Societe
} }
} }
/**
* \brief Verifie code fournisseur
* \return Renvoie 0 si ok, peut modifier le code client suivant le module utilis
*/
function check_codefournisseur() function check_codefournisseur()
{ {
if ($conf->global->CODEFOURNISSEUR_ADDON) global $conf;
if ($conf->global->SOCIETE_CODEFOURNISSEUR_ADDON)
{ {
require_once DOL_DOCUMENT_ROOT.'/includes/modules/societe/'.$conf->global->CODEFOURNISSEUR_ADDON.'.php'; require_once DOL_DOCUMENT_ROOT.'/includes/modules/societe/'.$conf->global->SOCIETE_CODEFOURNISSEUR_ADDON.'.php';
$var = $conf->global->CODEFOURNISSEUR_ADDON; $var = $conf->global->SOCIETE_CODEFOURNISSEUR_ADDON;
$mod = new $var; $mod = new $var;
return $mod->verif($this->db, $this->code_fournisseur); dolibarr_syslog("Societe::check_codefournisseur code_fournisseur=".$this->code_fournisseur." module=".$var);
return $mod->verif($this->db, $this->code_fournisseur, $this);
} }
else else
{ {