Fix: Amlioration 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 numriques (sera utilis pour gnrer 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
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";
// Pour compatibilite ascendante:
if ($this->global->CODECLIENT_ADDON) $this->global->SOCIETE_CODECLIENT_ADDON=$this->global->CODECLIENT_ADDON;

View File

@ -1,6 +1,6 @@
<?php
/* Copyright (C) 2004 Rodolphe Quiedeville <rodolphe@quiedeville.org>
* Copyright (C) 2006 Laurent Destailleur <eldy@users.sourceforge.net>
/* 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
@ -30,7 +30,6 @@
require_once(DOL_DOCUMENT_ROOT."/includes/modules/societe/modules_societe.class.php");
/**
\class mod_codeclient_leopard
\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
{
/*
* 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
*/
/*
* 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
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_leopard()
{
$this->nom = "Léopard";
$this->code_modifiable = 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;
}
$this->code_modifiable_invalide = 1; // code modifiable si il est invalide
/**
* \brief Renvoie la description du module
* \return string Texte descripif
*/
function info($langs)
{
return "Renvoie toujours ok, pour ceux qui ne veulent pas faire de test.";
}
$this->code_modifiable_null = 1; // code modifiable si il est null
/**
* \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));
$this->code_null = 1;
}
function info($langs)
{
return "Renvoie toujours ok, pour ceux qui ne veulent pas faire de test.";
}
function verif($db, $code)
{
// Renvoie toujours ok
return 0;
}
// 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
/* Copyright (C) 2004 Rodolphe Quiedeville <rodolphe@quiedeville.org>
* Copyright (C) 2006 Laurent Destailleur <eldy@users.sourceforge.net>
/* 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
@ -35,193 +35,223 @@ require_once(DOL_DOCUMENT_ROOT."/includes/modules/societe/modules_societe.class.
\class mod_codeclient_zebre
\brief Classe permettant la gestion zebre des codes tiers
*/
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
$this->code_modifiable_invalide = 0; // code modifiable si il est invalide
$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;
$is_dispo = $this->verif_dispo($db, $code, $socid);
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;
}
}
}
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)
{
$code = strtoupper(trim($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
{
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)
/** \brief Constructeur classe
*/
function mod_codeclient_zebre()
{
$ok++;
$this->nom = "Zèbre";
$this->code_modifiable = 0;
$this->code_modifiable_invalide = 0;
$this->code_modifiable_null = 1;
$this->code_null = 0;
}
}
return $ok;
}
function is_num($str)
{
$ok = 0;
$alpha = '0123456789';
for ($i = 0 ; $i < 4 ; $i++)
{
if (strpos($alpha, substr($str,$i, 1)) === false)
/**
* \brief Renvoie la description du module
* \return string Texte descripif
*/
function info($langs)
{
$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.";
}
/** \brief Renvoi la description du module
* \return string Texte descripif
*/
function getExample($langs)
{
return "ABCD7501";
}
/**
* \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;
}
}
return $ok;
}
}

View File

@ -49,6 +49,15 @@ class ModeleThirdPartyCode
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
* \return string Example
*/

View File

@ -114,6 +114,11 @@ CustomerCode=Customer code
SupplierCode=Supplier code
CustomerAccount=Customer 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
ProspectToContact=Prospect to contact
CompanyDeleted=Company "%s" deleted from database.

View File

@ -114,6 +114,11 @@ CustomerCode=Code client
SupplierCode=Code fournisseur
CustomerAccount=Compte client
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
ProspectToContact=Prospect à contacter
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
ExportDataset_member_1=Adhérentes et attributs
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
/* Copyright (C) 2001-2007 Rodolphe Quiedeville <rodolphe@quiedeville.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-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
$soc = new Societe($db);
/*
* Actions
*/
@ -93,91 +94,94 @@ if ($_POST["getsuppliercode"])
if ((! $_POST["getcustomercode"] && ! $_POST["getsuppliercode"])
&& ($_POST["action"] == 'add' || $_POST["action"] == 'update') && $user->rights->societe->creer)
{
$soc->nom = $_POST["nom"];
$soc->adresse = $_POST["adresse"];
$soc->cp = $_POST["cp"];
$soc->ville = $_POST["ville"];
$soc->pays_id = $_POST["pays_id"];
$soc->departement_id = $_POST["departement_id"];
$soc->tel = $_POST["tel"];
$soc->fax = $_POST["fax"];
$soc->email = $_POST["email"];
$soc->url = $_POST["url"];
$soc->siren = $_POST["siren"];
$soc->siret = $_POST["siret"];
$soc->ape = $_POST["ape"];
$soc->prefix_comm = $_POST["prefix_comm"];
$soc->code_client = $_POST["code_client"];
$soc->code_fournisseur = $_POST["code_fournisseur"];
$soc->codeclient_modifiable = $_POST["codeclient_modifiable"];
$soc->codefournisseur_modifiable = $_POST["codefournisseur_modifiable"];
$soc->capital = $_POST["capital"];
$soc->tva_assuj = $_POST["assujtva_value"];
$soc->tva_intra_code = $_POST["tva_intra_code"];
$soc->tva_intra_num = $_POST["tva_intra_num"];
$soc->tva_intra = $_POST["tva_intra_code"] . $_POST["tva_intra_num"];
$soc->forme_juridique_code = $_POST["forme_juridique_code"];
$soc->effectif_id = $_POST["effectif_id"];
$soc->typent_id = $_POST["typent_id"];
$soc->client = $_POST["client"];
$soc->fournisseur = $_POST["fournisseur"];
$soc->fournisseur_categorie = $_POST["fournisseur_categorie"];
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->nom = $_POST["nom"];
$soc->adresse = $_POST["adresse"];
$soc->cp = $_POST["cp"];
$soc->ville = $_POST["ville"];
$soc->pays_id = $_POST["pays_id"];
$soc->departement_id = $_POST["departement_id"];
$soc->tel = $_POST["tel"];
$soc->fax = $_POST["fax"];
$soc->email = $_POST["email"];
$soc->url = $_POST["url"];
$soc->siren = $_POST["siren"];
$soc->siret = $_POST["siret"];
$soc->ape = $_POST["ape"];
$soc->prefix_comm = $_POST["prefix_comm"];
$soc->code_client = $_POST["code_client"];
$soc->code_fournisseur = $_POST["code_fournisseur"];
$soc->codeclient_modifiable = $_POST["codeclient_modifiable"];
$soc->codefournisseur_modifiable = $_POST["codefournisseur_modifiable"];
$soc->capital = $_POST["capital"];
$soc->tva_assuj = $_POST["assujtva_value"];
$soc->tva_intra_code = $_POST["tva_intra_code"];
$soc->tva_intra_num = $_POST["tva_intra_num"];
$soc->tva_intra = $_POST["tva_intra_code"] . $_POST["tva_intra_num"];
$soc->forme_juridique_code = $_POST["forme_juridique_code"];
$soc->effectif_id = $_POST["effectif_id"];
$soc->typent_id = $_POST["typent_id"];
$soc->client = $_POST["client"];
$soc->fournisseur = $_POST["fournisseur"];
$soc->fournisseur_categorie = $_POST["fournisseur_categorie"];
if ($_POST["action"] == 'add')
{
$soc->id = $socid;
$reload = 0;
$mesg = $soc->error;
$_GET["action"]= "edit";
}
}
$result = $soc->create($user);
if ($result >= 0)
{
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";
}
}
}
if ($_POST["action"] == 'confirm_delete' && $_POST["confirm"] == 'yes' && $user->rights->societe->supprimer)
@ -214,13 +218,32 @@ $countrynotdefined=$langs->trans("ErrorSetACountryFirst").' ('.$langs->trans("Se
if ($_POST["getcustomercode"] || $_POST["getsuppliercode"] ||
$_GET["action"] == 'create' || $_POST["action"] == 'create')
{
/*
* Fiche en mode creation
*/
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
*/
$soc->fournisseur=0;
$soc->fournisseur_categorie = 0;
if ($_GET["type"]=='f') { $soc->fournisseur=1; }
if ($_GET["type"]=='c') { $soc->client=1; }
if ($_GET["type"]=='p') { $soc->client=2; }
@ -247,7 +270,7 @@ if ($_POST["getcustomercode"] || $_POST["getsuppliercode"] ||
$soc->typent_id=$_POST["typent_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_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="0"'.($soc->client==0?' selected="true"':'').'>Ni client, ni prospect</option>';
print '</select></td>';
print '<td width="25%">'.$langs->trans('CustomerCode').'</td><td width="25%">';
print '<table class="noborder"><tr><td>';
print '<input type="text" name="code_client" size="16" value="'.$soc->code_client.'" maxlength="15"></td><td>';
//print '<input type="image" name="getcustomercode" value="1" src="'.DOL_URL_ROOT.'/theme/'.$conf->theme.'/img/refresh.png" class="noborder">';
print '<table class="nobordernopadding"><tr><td>';
print '<input type="text" name="code_client" size="16" value="'.$soc->code_client.'" maxlength="15">';
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>';
// Fournisseur
@ -310,27 +340,33 @@ if ($_POST["getcustomercode"] || $_POST["getsuppliercode"] ||
$form->selectyesnonum("fournisseur",$soc->fournisseur);
print '</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 '</td><td>';
//print '<input type="image" name="getsuppliercode" value="1" src="'.DOL_URL_ROOT.'/theme/'.$conf->theme.'/img/refresh.png" class="noborder">';
//print '</td></tr></table>';
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>';
if ($soc->fournisseur)
{
$load = $soc->LoadSupplierCateg();
if ( $load == 0)
{
if (sizeof($soc->SupplierCategories) > 0)
{
print '<tr>';
print '<td>'.$langs->trans('SupplierCategory').'</td><td colspan="3">';
$form->select_array("fournisseur_categorie",$soc->SupplierCategories);
print '</td></tr>';
}
}
}
if ($soc->fournisseur)
{
$load = $soc->LoadSupplierCateg();
if ( $load == 0)
{
if (sizeof($soc->SupplierCategories) > 0)
{
print '<tr>';
print '<td>'.$langs->trans('SupplierCategory').'</td><td colspan="3">';
$form->select_array("fournisseur_categorie",$soc->SupplierCategories);
print '</td></tr>';
}
}
}
print '<tr><td>'.$langs->trans('Address').'</td><td colspan="3"><textarea name="adresse" cols="40" rows="3" wrap="soft">';
print $soc->adresse;
@ -474,12 +510,29 @@ elseif ($_GET["action"] == 'edit' || $_POST["action"] == 'edit')
/*
* Fiche societe en mode edition
*/
print_titre($langs->trans("EditCompany"));
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->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 '</select></td>';
print '<td width="25%">'.$langs->trans('CustomerCode').'</td><td width="25%">';
print '<table class="nobordernopadding"><tr><td>';
if ($soc->codeclient_modifiable == 1)
{
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
{
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>';
// Fournisseur
@ -576,6 +640,8 @@ elseif ($_GET["action"] == 'edit' || $_POST["action"] == 'edit')
$form->selectyesnonum("fournisseur",$soc->fournisseur);
print '</td>';
print '<td>'.$langs->trans('SupplierCode').'</td><td>';
print '<table class="nobordernopadding"><tr><td>';
if ($soc->codefournisseur_modifiable == 1)
{
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
{
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>';
if ($soc->fournisseur)

View File

@ -118,15 +118,8 @@ class Societe
// definit module code fournisseur
$varfournisseur = $conf->global->SOCIETE_CODEFOURNISSEUR_ADDON;
if ($varfournisseur == $varclient) // Optimisation
{
$this->mod_codefournisseur = $this->mod_codeclient;
}
else
{
require_once DOL_DOCUMENT_ROOT.'/includes/modules/societe/'.$varfournisseur.'.php';
$this->mod_codefournisseur = new $varfournisseur;
}
require_once DOL_DOCUMENT_ROOT.'/includes/modules/societe/'.$varfournisseur.'.php';
$this->mod_codefournisseur = new $varfournisseur;
$this->codefournisseur_modifiable = $this->mod_codefournisseur->code_modifiable;
return 1;
@ -145,7 +138,7 @@ class Societe
// Nettoyage paramètres
$this->nom=trim($this->nom);
dolibarr_syslog("societe.class.php::create ".$this->nom);
dolibarr_syslog("Societe::create ".$this->nom);
$this->db->begin();
@ -171,8 +164,8 @@ class Societe
$this->add_commercial($user, $user->id);
}
// si le fournisseur est classe on l'ajoute
$this->AddFournisseurInCategory($this->fournisseur_categorie);
// si le fournisseur est classe on l'ajoute
$this->AddFournisseurInCategory($this->fournisseur_categorie);
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
// 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 == -1)
@ -254,6 +247,28 @@ class Societe
$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;
}
@ -379,7 +394,7 @@ class Societe
$sql .= " WHERE idp = '" . $id ."'";
dolibarr_syslog("Societe.class::update sql=".$sql);
dolibarr_syslog("Societe::update sql=".$sql);
$resql=$this->db->query($sql);
if ($resql)
{
@ -1409,7 +1424,7 @@ class Societe
* \brief Verifie code client
* \return Renvoie 0 si ok, peut modifier le code client suivant le module utilis
*/
function verif_codeclient()
function check_codeclient()
{
global $conf;
if ($conf->global->SOCIETE_CODECLIENT_ADDON)
@ -1420,26 +1435,8 @@ class Societe
$mod = new $var;
return $mod->verif($this->db, $this->code_client, $this->id);
}
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);
dolibarr_syslog("Societe::check_codeclient code_client=".$this->code_client." module=".$var);
return $mod->verif($this->db, $this->code_client, $this);
}
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()
{
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;
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
{