diff --git a/ChangeLog b/ChangeLog
index 40dcb31a4bb..778a196048b 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -38,6 +38,8 @@ For translators:
- Update some language files.
For developers:
+- An external module can force the third party code to be required whatever is the rule of
+ third party code module.
- Update fckeditor to 2.6.4.
- Removed some deprecated files.
- Creation of directory in module descriptor is simpler.
diff --git a/htdocs/includes/modules/societe/mod_codeclient_elephant.php b/htdocs/includes/modules/societe/mod_codeclient_elephant.php
index 618eb067f0e..d913267f529 100644
--- a/htdocs/includes/modules/societe/mod_codeclient_elephant.php
+++ b/htdocs/includes/modules/societe/mod_codeclient_elephant.php
@@ -197,12 +197,16 @@ class mod_codeclient_elephant extends ModeleThirdPartyCode
/**
- * \brief Verifie la validite du code
- * \param $db Handler acces base
- * \param $code Code a verifier/corriger
- * \param $soc Objet societe
- * \param $type 0 = client/prospect , 1 = fournisseur
- * \return int <0 if KO, 0 if OK
+ * \brief Check validity of code according to its rules
+ * \param $db Database handler
+ * \param $code Code to check/correct
+ * \param $soc Object third party
+ * \param $type 0 = customer/prospect , 1 = supplier
+ * \return int 0 if OK
+ * -1 ErrorBadCustomerCodeSyntax
+ * -2 ErrorCustomerCodeRequired
+ * -3 ErrorCustomerCodeAlreadyUsed
+ * -4 ErrorPrefixRequired
*/
function verif($db, &$code, $soc, $type)
{
@@ -213,10 +217,14 @@ class mod_codeclient_elephant extends ModeleThirdPartyCode
$result=0;
$code = strtoupper(trim($code));
- if (! $code && $this->code_null)
+ if (empty($code) && $this->code_null && empty($conf->global->MAIN_COMPANY_CODE_ALWAYS_REQUIRED))
{
$result=0;
}
+ else if (empty($code) && (! $this->code_null || ! empty($conf->global->MAIN_COMPANY_CODE_ALWAYS_REQUIRED)) )
+ {
+ $result=-2;
+ }
else
{
// Get Mask value
diff --git a/htdocs/includes/modules/societe/mod_codeclient_leopard.php b/htdocs/includes/modules/societe/mod_codeclient_leopard.php
index fbc660eb583..712cd67a0d1 100644
--- a/htdocs/includes/modules/societe/mod_codeclient_leopard.php
+++ b/htdocs/includes/modules/societe/mod_codeclient_leopard.php
@@ -29,17 +29,17 @@ require_once(DOL_DOCUMENT_ROOT."/includes/modules/societe/modules_societe.class.
/**
- \class mod_codeclient_leopard
- \brief Classe permettant la gestion leopard des codes tiers
-*/
+ \class mod_codeclient_leopard
+ \brief Classe permettant la gestion leopard des codes tiers
+ */
class mod_codeclient_leopard extends ModeleThirdPartyCode
{
/*
- * Attention ce module est utilise par defaut si aucun module n'a
- * ete definit dans la configuration
- *
- * Le fonctionnement de celui-ci doit dont rester le plus ouvert possible
- */
+ * Attention ce module est utilise par defaut si aucun module n'a
+ * ete definit 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
@@ -51,7 +51,7 @@ class mod_codeclient_leopard extends ModeleThirdPartyCode
/** \brief Constructeur classe
- */
+ */
function mod_codeclient_leopard()
{
$this->nom = "Leopard";
@@ -65,9 +65,9 @@ class mod_codeclient_leopard extends ModeleThirdPartyCode
/**
- * \brief Renvoie la description du module
- * \return string Texte descripif
- */
+ * \brief Renvoie la description du module
+ * \return string Texte descripif
+ */
function info($langs)
{
return $langs->trans("LeopardNumRefModelDesc");
@@ -75,27 +75,45 @@ class mod_codeclient_leopard extends ModeleThirdPartyCode
/** \brief Return next value available
- * \return string Value
- */
- function getNextValue($objsoc=0,$type=-1)
- {
- global $langs;
- return '';
- }
+ * \return string Value
+ */
+ function getNextValue($objsoc=0,$type=-1)
+ {
+ global $langs;
+ return '';
+ }
/**
- * \brief check validity of code
- * \param $db Handler acces base
- * \param $code Code to check
- * \param $soc Objet societe
- */
- function verif($db, &$code, $soc)
+ * \brief Check validity of code according to its rules
+ * \param $db Database handler
+ * \param $code Code to check/correct
+ * \param $soc Object third party
+ * \param $type 0 = customer/prospect , 1 = supplier
+ * \return int 0 if OK
+ * -1 ErrorBadCustomerCodeSyntax
+ * -2 ErrorCustomerCodeRequired
+ * -3 ErrorCustomerCodeAlreadyUsed
+ * -4 ErrorPrefixRequired
+ */
+ function verif($db, &$code, $soc, $type)
{
+ global $conf;
+
+ $result=0;
$code = strtoupper(trim($code));
- // Renvoie toujours ok
- return 0;
+ if (empty($code) && $this->code_null && empty($conf->global->MAIN_COMPANY_CODE_ALWAYS_REQUIRED))
+ {
+ $result=0;
+ }
+ else if (empty($code) && (! $this->code_null || ! empty($conf->global->MAIN_COMPANY_CODE_ALWAYS_REQUIRED)) )
+ {
+ $result=-2;
+ }
+
+ dol_syslog("mod_codeclient_leopard::verif type=".$type." result=".$result);
+ return $result;
}
}
diff --git a/htdocs/includes/modules/societe/mod_codeclient_monkey.php b/htdocs/includes/modules/societe/mod_codeclient_monkey.php
index 0b7b8cd47f2..ba65a7736c1 100644
--- a/htdocs/includes/modules/societe/mod_codeclient_monkey.php
+++ b/htdocs/includes/modules/societe/mod_codeclient_monkey.php
@@ -29,9 +29,9 @@ require_once(DOL_DOCUMENT_ROOT."/includes/modules/societe/modules_societe.class.
/**
- \class mod_codeclient_monkey
- \brief Classe permettant la gestion monkey des codes tiers
-*/
+ \class mod_codeclient_monkey
+ \brief Classe permettant la gestion monkey des codes tiers
+ */
class mod_codeclient_monkey extends ModeleThirdPartyCode
{
var $nom; // Nom du modele
@@ -46,7 +46,7 @@ class mod_codeclient_monkey extends ModeleThirdPartyCode
var $prefixsupplier='SU';
/** \brief Constructeur classe
- */
+ */
function mod_codeclient_monkey()
{
$this->nom = "Monkey";
@@ -60,8 +60,8 @@ class mod_codeclient_monkey extends ModeleThirdPartyCode
/** \brief Renvoi la description du module
- * \return string Texte descripif
- */
+ * \return string Texte descripif
+ */
function info($langs)
{
return $langs->trans("MonkeyNumRefModelDesc",$this->prefixcustomer,$this->prefixsupplier);
@@ -69,8 +69,8 @@ class mod_codeclient_monkey extends ModeleThirdPartyCode
/** \brief Renvoi la description du module
- * \return string Texte descripif
- */
+ * \return string Texte descripif
+ */
function getExample($langs,$objsoc=0,$type=-1)
{
return $this->prefixcustomer.'0901-0001
'.$this->prefixsupplier.'0901-0001';
@@ -105,51 +105,62 @@ class mod_codeclient_monkey extends ModeleThirdPartyCode
if ($type == 0) $prefix=$this->prefixcustomer;
if ($type == 1) $prefix=$this->prefixsupplier;
- // D'abord on r�cup�re la valeur max (r�ponse imm�diate car champ ind�x�)
- $posindice=8;
- $sql = "SELECT MAX(0+SUBSTRING(".$field.",".$posindice.")) as max";
- $sql.= " FROM ".MAIN_DB_PREFIX."societe";
+ // D'abord on r�cup�re la valeur max (r�ponse imm�diate car champ ind�x�)
+ $posindice=8;
+ $sql = "SELECT MAX(0+SUBSTRING(".$field.",".$posindice.")) as max";
+ $sql.= " FROM ".MAIN_DB_PREFIX."societe";
$sql.= " WHERE ".$field." LIKE '".$prefix."%'";
- $resql=$db->query($sql);
- if ($resql)
- {
- $obj = $db->fetch_object($resql);
- if ($obj) $max = $obj->max;
- else $max=0;
- }
- else
- {
- dol_syslog("mod_codeclient_monkey::getNextValue sql=".$sql);
- return -1;
- }
+ $resql=$db->query($sql);
+ if ($resql)
+ {
+ $obj = $db->fetch_object($resql);
+ if ($obj) $max = $obj->max;
+ else $max=0;
+ }
+ else
+ {
+ dol_syslog("mod_codeclient_monkey::getNextValue sql=".$sql);
+ return -1;
+ }
- //$date=time();
- $date=gmmktime();
- $yymm = strftime("%y%m",$date);
- $num = sprintf("%04s",$max+1);
+ //$date=time();
+ $date=gmmktime();
+ $yymm = strftime("%y%m",$date);
+ $num = sprintf("%04s",$max+1);
- dol_syslog("mod_codeclient_monkey::getNextValue return ".$prefix.$yymm."-".$num);
- return $prefix.$yymm."-".$num;
+ dol_syslog("mod_codeclient_monkey::getNextValue return ".$prefix.$yymm."-".$num);
+ return $prefix.$yymm."-".$num;
}
/**
- * \brief Verifie la validite du code
- * \param $db Handler acces base
- * \param $code Code a verifier/corriger
- * \param $soc Objet societe
- * \return int <0 si KO, 0 si OK
- */
- function verif($db, &$code, $soc)
+ * \brief Check validity of code according to its rules
+ * \param $db Database handler
+ * \param $code Code to check/correct
+ * \param $soc Object third party
+ * \param $type 0 = customer/prospect , 1 = supplier
+ * \return int 0 if OK
+ * -1 ErrorBadCustomerCodeSyntax
+ * -2 ErrorCustomerCodeRequired
+ * -3 ErrorCustomerCodeAlreadyUsed
+ * -4 ErrorPrefixRequired
+ */
+ function verif($db, &$code, $soc, $type)
{
+ global $conf;
+
$result=0;
$code = strtoupper(trim($code));
- if (! $code && $this->code_null)
+ if (empty($code) && $this->code_null && empty($conf->global->MAIN_COMPANY_CODE_ALWAYS_REQUIRED))
{
$result=0;
}
+ else if (empty($code) && (! $this->code_null || ! empty($conf->global->MAIN_COMPANY_CODE_ALWAYS_REQUIRED)) )
+ {
+ $result=-2;
+ }
else
{
if ($this->verif_syntax($code) >= 0)
@@ -176,18 +187,19 @@ class mod_codeclient_monkey extends ModeleThirdPartyCode
}
}
}
- dol_syslog("mod_codeclient_monkey::verif result=".$result);
+
+ dol_syslog("mod_codeclient_monkey::verif type=".$type." result=".$result);
return $result;
}
/**
- * \brief Renvoi si un code est pris ou non (par autre tiers)
- * \param $db Handler acces base
- * \param $code Code a verifier
- * \param $soc Objet societe
- * \return int 0 si dispo, <0 si erreur
- */
+ * \brief Renvoi si un code est pris ou non (par autre tiers)
+ * \param $db Handler acces base
+ * \param $code Code a verifier
+ * \param $soc Objet societe
+ * \return int 0 si dispo, <0 si erreur
+ */
function verif_dispo($db, $code, $soc)
{
$sql = "SELECT code_client FROM ".MAIN_DB_PREFIX."societe";
@@ -215,10 +227,10 @@ class mod_codeclient_monkey extends ModeleThirdPartyCode
/**
- * \brief Renvoi si un code respecte la syntaxe
- * \param $code Code a verifier
- * \return int 0 si OK, <0 si KO
- */
+ * \brief Renvoi si un code respecte la syntaxe
+ * \param $code Code a verifier
+ * \return int 0 si OK, <0 si KO
+ */
function verif_syntax($code)
{
$res = 0;
diff --git a/htdocs/soc.php b/htdocs/soc.php
index 8b9ef64168c..c1470b23dfa 100644
--- a/htdocs/soc.php
+++ b/htdocs/soc.php
@@ -4,7 +4,7 @@
* Copyright (C) 2004-2009 Laurent Destailleur
* Copyright (C) 2005 Eric Seigne
* Copyright (C) 2005-2009 Regis Houssin
- * Copyright (C) 2008 Patrick Raguin
+ * Copyright (C) 2008 Patrick Raguin
*
* 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
diff --git a/htdocs/societe.class.php b/htdocs/societe.class.php
index 97b8c4db2d6..d9ad1972cda 100644
--- a/htdocs/societe.class.php
+++ b/htdocs/societe.class.php
@@ -147,10 +147,11 @@ class Societe extends CommonObject
$this->db->begin();
- // For automatic creation during create action (not used by Dolibarr)
+ // For automatic creation during create action (not used by Dolibarr GUI, can be used by scripts)
if ($this->code_client == -1) $this->get_codeclient($this->prefix_comm,0);
if ($this->code_fournisseur == -1) $this->get_codefournisseur($this->prefix_comm,1);
+ // Check more parameters
$result = $this->verify();
if ($result >= 0)
@@ -229,7 +230,7 @@ class Societe extends CommonObject
}
/**
- * \brief Check properties of third party are ok
+ * \brief Check properties of third party are ok (like name, third party codes, ...)
* \return int 0 if OK, <0 if KO
*/
function verify()
@@ -1553,8 +1554,12 @@ class Societe extends CommonObject
/**
- * \brief Verifie code client
- * \return int <0 si KO, 0 si OK, peut modifier le code client suivant le module utilise
+ * \brief Check customer code
+ * \return int 0 if OK
+ * -1 ErrorBadCustomerCodeSyntax
+ * -2 ErrorCustomerCodeRequired
+ * -3 ErrorCustomerCodeAlreadyUsed
+ * -4 ErrorPrefixRequired
*/
function check_codeclient()
{
@@ -1578,8 +1583,12 @@ class Societe extends CommonObject
}
/**
- * \brief Verifie code fournisseur
- * \return int <0 si KO, 0 si OK, peut modifier le code client suivant le module utilise
+ * \brief Check supplier code
+ * \return int 0 if OK
+ * -1 ErrorBadCustomerCodeSyntax
+ * -2 ErrorCustomerCodeRequired
+ * -3 ErrorCustomerCodeAlreadyUsed
+ * -4 ErrorPrefixRequired
*/
function check_codefournisseur()
{