Maxi debug of barcode feature.

New: Barcode format and mandatory requirement is checked.
New: Start to add new page for barcode init.
This commit is contained in:
Laurent Destailleur 2014-02-19 01:51:19 +01:00
parent 03d056319c
commit 2e67bbc382
8 changed files with 506 additions and 324 deletions

View File

@ -110,12 +110,12 @@ class MenuManager
// Modules system tools // Modules system tools
// TODO Find a way to add parent menu only if child menu exists. For the moment, no other method than hard coded methods. // TODO Find a way to add parent menu only if child menu exists. For the moment, no other method than hard coded methods.
if (! empty($conf->product->enabled) || ! empty($conf->service->enabled) || ! empty($conf->barcode->enabled) // TODO We should enabled module system tools entry without hardcoded test on some modules if (! empty($conf->product->enabled) || ! empty($conf->service->enabled) || ! empty($conf->barcode->enabled) // TODO We should enabled module system tools entry without hardcoded test, but when at least one modules bringing such entries are on
|| ! empty($conf->global->MAIN_MENU_ENABLE_MODULETOOLS)) || ! empty($conf->global->MAIN_MENU_ENABLE_MODULETOOLS))
{ {
if (empty($user->societe_id)) if (empty($user->societe_id))
{ {
if ($leftmenu=="modulesadmintools" && $user->admin) if ((! empty($conf->product->enabled) || ! empty($conf->service->enabled)) && ($leftmenu=="modulesadmintools" && $user->admin))
{ {
$langs->load("products"); $langs->load("products");
$array_menu_product=array( $array_menu_product=array(
@ -133,24 +133,6 @@ class MenuManager
); );
array_unshift($tabMenu,$array_menu_product); // add at beginning of array array_unshift($tabMenu,$array_menu_product); // add at beginning of array
} }
if ($leftmenu=="modulesadmintools" && $user->admin)
{
$langs->load("admin");
$array_menu_product=array(
'url'=>"/barcode/codeinit.php?mainmenu=home&leftmenu=modulesadmintools",
'titre'=>$langs->trans("MassBarcodeInit"),
'enabled'=>($user->admin?true:false),
'perms'=>($user->admin?true:false),
'fk_mainmenu'=>'home',
'fk_leftmenu'=>'modulesadmintools',
'fk_menu'=>-1,
'mainmenu'=>'home',
'leftmenu'=>'modulesadmintools_massbarcode',
'type'=>'left',
'position'=>21
);
array_unshift($tabMenu,$array_menu_product); // add at beginning of array
}
// Main menu title // Main menu title
$array_menu_product=array( $array_menu_product=array(
'url'=>"/admin/tools/index.php?mainmenu=home&leftmenu=modulesadmintools", 'url'=>"/admin/tools/index.php?mainmenu=home&leftmenu=modulesadmintools",

View File

@ -539,7 +539,7 @@ function print_left_eldy_menu($db,$menu_array_before,$menu_array_after,&$tabMenu
} }
// Modules system tools // Modules system tools
if (! empty($conf->product->enabled) || ! empty($conf->service->enabled) || ! empty($conf->barcode->enabled) // TODO We should enabled module system tools entry without hardcoded test on some modules if (! empty($conf->product->enabled) || ! empty($conf->service->enabled) || ! empty($conf->barcode->enabled) // TODO We should enabled module system tools entry without hardcoded test, but when at least one modules bringing such entries are on
|| ! empty($conf->global->MAIN_MENU_ENABLE_MODULETOOLS)) // Some external modules may need to force to have this entry on. || ! empty($conf->global->MAIN_MENU_ENABLE_MODULETOOLS)) // Some external modules may need to force to have this entry on.
{ {
if (empty($user->societe_id)) if (empty($user->societe_id))

View File

@ -190,15 +190,29 @@ class mod_barcode_product_standard extends ModeleNumRefBarCode
} }
else else
{ {
// Get Mask value if ($this->verif_syntax($code) >= 0)
$mask = empty($conf->global->BARCODE_STANDARD_PRODUCT_MASK)?'':$conf->global->BARCODE_STANDARD_PRODUCT_MASK;
if (! $mask)
{ {
$this->error='NotConfigured'; $is_dispo = $this->verif_dispo($db, $code, $product);
return ''; if ($is_dispo <> 0)
{
$result=-3;
}
else
{
$result=0;
}
}
else
{
if (dol_strlen($code) == 0)
{
$result=-2;
}
else
{
$result=-1;
}
} }
$result=check_value($mask,$code);
} }
dol_syslog(get_class($this)."::verif type=".$type." result=".$result); dol_syslog(get_class($this)."::verif type=".$type." result=".$result);
@ -216,8 +230,8 @@ class mod_barcode_product_standard extends ModeleNumRefBarCode
*/ */
function verif_dispo($db, $code, $product) function verif_dispo($db, $code, $product)
{ {
$sql = "SELECT ref FROM ".MAIN_DB_PREFIX."product"; $sql = "SELECT barcode FROM ".MAIN_DB_PREFIX."product";
$sql.= " WHERE ref = '".$code."'"; $sql.= " WHERE barcode = '".$code."'";
if ($product->id > 0) $sql.= " AND rowid <> ".$product->id; if ($product->id > 0) $sql.= " AND rowid <> ".$product->id;
$resql=$db->query($sql); $resql=$db->query($sql);
@ -239,6 +253,31 @@ class mod_barcode_product_standard extends ModeleNumRefBarCode
} }
/**
* Renvoi si un code respecte la syntaxe
*
* @param string $code Code a verifier
* @return int 0 if OK, <0 if KO
*/
function verif_syntax($code)
{
global $conf;
$res = 0;
// Get Mask value
$mask = empty($conf->global->BARCODE_STANDARD_PRODUCT_MASK)?'':$conf->global->BARCODE_STANDARD_PRODUCT_MASK;
if (! $mask)
{
$this->error='NotConfigured';
return '';
}
$result=check_value($mask,$code);
return $result;
}
} }
?> ?>

View File

@ -26,8 +26,11 @@ ErrorFromToAccountsMustDiffers=Source and targets bank accounts must be differen
ErrorBadThirdPartyName=Bad value for third party name ErrorBadThirdPartyName=Bad value for third party name
ErrorProdIdIsMandatory=The %s is mandatory ErrorProdIdIsMandatory=The %s is mandatory
ErrorBadCustomerCodeSyntax=Bad syntax for customer code ErrorBadCustomerCodeSyntax=Bad syntax for customer code
ErrorBadBarCodeSyntax=Bad syntax for bar code
ErrorCustomerCodeRequired=Customer code required ErrorCustomerCodeRequired=Customer code required
ErrorBarCodeRequired=Bar code required
ErrorCustomerCodeAlreadyUsed=Customer code already used ErrorCustomerCodeAlreadyUsed=Customer code already used
ErrorBarCodeAlreadyUsed=Bar code already used
ErrorPrefixRequired=Prefix required ErrorPrefixRequired=Prefix required
ErrorUrlNotValid=The website address is incorrect ErrorUrlNotValid=The website address is incorrect
ErrorBadSupplierCodeSyntax=Bad syntax for supplier code ErrorBadSupplierCodeSyntax=Bad syntax for supplier code

View File

@ -1,6 +1,6 @@
<?php <?php
/* Copyright (C) 2001-2007 Rodolphe Quiedeville <rodolphe@quiedeville.org> /* Copyright (C) 2001-2007 Rodolphe Quiedeville <rodolphe@quiedeville.org>
* Copyright (C) 2004-2013 Laurent Destailleur <eldy@users.sourceforge.net> * Copyright (C) 2004-2014 Laurent Destailleur <eldy@users.sourceforge.net>
* Copyright (C) 2005-2013 Regis Houssin <regis.houssin@capnetworks.com> * Copyright (C) 2005-2013 Regis Houssin <regis.houssin@capnetworks.com>
* Copyright (C) 2006 Andre Cianfarani <acianfa@free.fr> * Copyright (C) 2006 Andre Cianfarani <acianfa@free.fr>
* Copyright (C) 2007-2011 Jean Heimburger <jean@tiaris.info> * Copyright (C) 2007-2011 Jean Heimburger <jean@tiaris.info>
@ -202,7 +202,7 @@ class Product extends CommonObject
* *
* @param User $user User making insert * @param User $user User making insert
* @param int $notrigger Disable triggers * @param int $notrigger Disable triggers
* @return int Id of product/service if OK or number of error < 0 * @return int Id of product/service if OK, < 0 if KO
*/ */
function create($user,$notrigger=0) function create($user,$notrigger=0)
{ {
@ -300,6 +300,12 @@ class Product extends CommonObject
// For automatic creation during create action (not used by Dolibarr GUI, can be used by scripts) // For automatic creation during create action (not used by Dolibarr GUI, can be used by scripts)
if ($this->barcode == -1) $this->get_barcode($this,$this->barcode_type_code); if ($this->barcode == -1) $this->get_barcode($this,$this->barcode_type_code);
// Check more parameters
// If error, this->errors[] is filled
$result = $this->verify();
if ($result >= 0)
{
$sql = "SELECT count(*) as nb"; $sql = "SELECT count(*) as nb";
$sql.= " FROM ".MAIN_DB_PREFIX."product"; $sql.= " FROM ".MAIN_DB_PREFIX."product";
$sql.= " WHERE entity IN (".getEntity('product', 1).")"; $sql.= " WHERE entity IN (".getEntity('product', 1).")";
@ -427,6 +433,89 @@ class Product extends CommonObject
return -$error; return -$error;
} }
} }
else
{
$this->db->rollback();
dol_syslog(get_class($this)."::Create fails verify ".join(',',$this->errors), LOG_WARNING);
return -3;
}
}
/**
* Check properties of product are ok (like name, barcode, ...)
*
* @return int 0 if OK, <0 if KO
*/
function verify()
{
$this->errors=array();
$result = 0;
$this->ref = trim($this->ref);
if (! $this->ref)
{
$this->errors[] = 'ErrorBadRef';
$result = -2;
}
$rescode = $this->check_barcode($this->barcode);
if ($rescode <> 0)
{
if ($rescode == -1)
{
$this->errors[] = 'ErrorBadBarCodeSyntax';
}
if ($rescode == -2)
{
$this->errors[] = 'ErrorBarCodeRequired';
}
if ($rescode == -3)
{
$this->errors[] = 'ErrorBarCodeAlreadyUsed';
}
$result = -3;
}
return $result;
}
/**
* Check customer code
*
* @param string $valuetotest Value to test
* @return int 0 if OK
* -1 ErrorBadBarCodeSyntax
* -2 ErrorBarCodeRequired
* -3 ErrorBarCodeAlreadyUsed
*/
function check_barcode($valuetotest)
{
global $conf;
if (! empty($conf->barcode->enabled) && ! empty($conf->global->BARCODE_PRODUCT_ADDON_NUM))
{
$module=strtolower($conf->global->BARCODE_PRODUCT_ADDON_NUM);
$dirsociete=array_merge(array('/core/modules/barcode/'),$conf->modules_parts['barcode']);
foreach ($dirsociete as $dirroot)
{
$res=dol_include_once($dirroot.$module.'.php');
if ($res) break;
}
$mod = new $module();
dol_syslog(get_class($this)."::check_barcode barcode=".$valuetotest." module=".$module);
$result = $mod->verif($this->db, $valuetotest, $this, 0);
return $result;
}
else
{
return 0;
}
}
/** /**
* Update a record into database * Update a record into database
@ -434,7 +523,7 @@ class Product extends CommonObject
* @param int $id Id of product * @param int $id Id of product
* @param User $user Object user making update * @param User $user Object user making update
* @param int $notrigger Disable triggers * @param int $notrigger Disable triggers
* @param string $action Current action for hookmanager * @param string $action Current action for hookmanager ('add' or 'update')
* @return int 1 if OK, -1 if ref already exists, -2 if other error * @return int 1 if OK, -1 if ref already exists, -2 if other error
*/ */
function update($id, $user, $notrigger=false, $action='update') function update($id, $user, $notrigger=false, $action='update')
@ -443,9 +532,7 @@ class Product extends CommonObject
$error=0; $error=0;
$this->db->begin(); // Check parameters
// Verification parametres
if (! $this->libelle) $this->libelle = 'MISSING LABEL'; if (! $this->libelle) $this->libelle = 'MISSING LABEL';
// Clean parameters // Clean parameters
@ -473,12 +560,24 @@ class Product extends CommonObject
//Gencod //Gencod
$this->barcode=trim($this->barcode); $this->barcode=trim($this->barcode);
// For automatic creation
if ($this->barcode == -1) $this->get_barcode($this,$this->barcode_type_code);
$this->accountancy_code_buy = trim($this->accountancy_code_buy); $this->accountancy_code_buy = trim($this->accountancy_code_buy);
$this->accountancy_code_sell= trim($this->accountancy_code_sell); $this->accountancy_code_sell= trim($this->accountancy_code_sell);
$this->db->begin();
// Check name is required and codes are ok or unique.
// If error, this->errors[] is filled
if ($action != 'add')
{
$result = $this->verify(); // We don't check when update called during a create because verify was already done
}
if ($result >= 0)
{
// For automatic creation
if ($this->barcode == -1) $this->get_barcode($this,$this->barcode_type_code);
$sql = "UPDATE ".MAIN_DB_PREFIX."product"; $sql = "UPDATE ".MAIN_DB_PREFIX."product";
$sql.= " SET label = '" . $this->db->escape($this->libelle) ."'"; $sql.= " SET label = '" . $this->db->escape($this->libelle) ."'";
$sql.= ", ref = '" . $this->ref ."'"; $sql.= ", ref = '" . $this->ref ."'";
@ -603,6 +702,13 @@ class Product extends CommonObject
} }
} }
} }
else
{
$this->db->rollback();
dol_syslog(get_class($this)."::Update fails verify ".join(',',$this->errors), LOG_WARNING);
return -3;
}
}
/** /**
* Delete a product from database (if not used) * Delete a product from database (if not used)
@ -3156,6 +3262,8 @@ class Product extends CommonObject
$this->tobuy=1; $this->tobuy=1;
$this->type=0; $this->type=0;
$this->note='This is a comment (private)'; $this->note='This is a comment (private)';
$this->barcode=-1; // Create barcode automatically
} }
} }
?> ?>

View File

@ -117,11 +117,26 @@ if (empty($reshook))
// Barcode value // Barcode value
if ($action == 'setbarcode' && $user->rights->barcode->creer) if ($action == 'setbarcode' && $user->rights->barcode->creer)
{ {
//Todo: ajout verification de la validite du code barre en fonction du type $result=$object->check_barcode(GETPOST('barcode'));
if ($result >= 0)
{
$result = $object->setValueFrom('barcode', GETPOST('barcode')); $result = $object->setValueFrom('barcode', GETPOST('barcode'));
header("Location: ".$_SERVER['PHP_SELF']."?id=".$object->id); header("Location: ".$_SERVER['PHP_SELF']."?id=".$object->id);
exit; exit;
} }
else
{
$langs->load("errors");
if ($result == -1) $errors[] = 'ErrorBadBarCodeSyntax';
else if ($result == -2) $errors[] = 'ErrorBarCodeRequired';
else if ($result == -3) $errors[] = 'ErrorBarCodeAlreadyUsed';
else $errors[] = 'FailedToValidateBarCode';
$error++;
setEventMessage($errors,'errors');
}
}
if ($action == 'setaccountancy_code_buy') if ($action == 'setaccountancy_code_buy')
{ {
@ -237,7 +252,8 @@ if (empty($reshook))
} }
else else
{ {
setEventMessage($langs->trans($object->error), 'errors'); if (count($object->errors)) setEventMessage($object->errors, 'errors');
else setEventMessage($langs->trans($object->error), 'errors');
$action = "create"; $action = "create";
} }
} }
@ -279,6 +295,10 @@ if (empty($reshook))
$object->volume_units = GETPOST('volume_units'); $object->volume_units = GETPOST('volume_units');
$object->finished = GETPOST('finished'); $object->finished = GETPOST('finished');
$object->hidden = GETPOST('hidden')=='yes'?1:0; $object->hidden = GETPOST('hidden')=='yes'?1:0;
$object->barcode_type = GETPOST('fk_barcode_type');
$object->barcode = GETPOST('barcode');
$object->accountancy_code_sell = GETPOST('accountancy_code_sell'); $object->accountancy_code_sell = GETPOST('accountancy_code_sell');
$object->accountancy_code_buy = GETPOST('accountancy_code_buy'); $object->accountancy_code_buy = GETPOST('accountancy_code_buy');
@ -293,13 +313,15 @@ if (empty($reshook))
} }
else else
{ {
setEventMessage($langs->trans($object->error), 'errors'); if (count($object->errors)) setEventMessage($object->errors, 'errors');
else setEventMessage($langs->trans($object->error), 'errors');
$action = 'edit'; $action = 'edit';
} }
} }
else else
{ {
setEventMessage($langs->trans("ErrorProductBadRefOrLabel"), 'errors'); if (count($object->errors)) setEventMessage($object->errors, 'errors');
else setEventMessage($langs->trans("ErrorProductBadRefOrLabel"), 'errors');
$action = 'edit'; $action = 'edit';
} }
} }
@ -762,8 +784,8 @@ else
print $formbarcode->select_barcode_type($fk_barcode_type, 'fk_barcode_type', 1); print $formbarcode->select_barcode_type($fk_barcode_type, 'fk_barcode_type', 1);
print '</td><td>'.$langs->trans("BarcodeValue").'</td><td>'; print '</td><td>'.$langs->trans("BarcodeValue").'</td><td>';
$tmpcode=isset($_POST['barcode'])?GETPOST('barcode'):$object->barcode; $tmpcode=isset($_POST['barcode'])?GETPOST('barcode'):$object->barcode;
if (! empty($modBarCodeProduct->code_auto)) $tmpcode=$modBarCodeProduct->getNextValue($object,$type); if (empty($tmpcode) && ! empty($modBarCodeProduct->code_auto)) $tmpcode=$modBarCodeProduct->getNextValue($object,$type);
print '<input size="40" type="text" name="barcode" value="'.$tmpcode.'">'; print '<input size="40" type="text" name="barcode" value="'.dol_escape_htmltag($tmpcode).'">';
print '</td></tr>'; print '</td></tr>';
} }
@ -955,7 +977,7 @@ else
// Label // Label
print '<tr><td class="fieldrequired">'.$langs->trans("Label").'</td><td colspan="3"><input name="libelle" size="40" maxlength="255" value="'.$object->libelle.'"></td></tr>'; print '<tr><td class="fieldrequired">'.$langs->trans("Label").'</td><td colspan="3"><input name="libelle" size="40" maxlength="255" value="'.$object->libelle.'"></td></tr>';
// Status // Status To sell
print '<tr><td class="fieldrequired">'.$langs->trans("Status").' ('.$langs->trans("Sell").')</td><td colspan="3">'; print '<tr><td class="fieldrequired">'.$langs->trans("Status").' ('.$langs->trans("Sell").')</td><td colspan="3">';
print '<select class="flat" name="statut">'; print '<select class="flat" name="statut">';
if ($object->status) if ($object->status)
@ -971,7 +993,7 @@ else
print '</select>'; print '</select>';
print '</td></tr>'; print '</td></tr>';
// To Buy // Status To Buy
print '<tr><td class="fieldrequired">'.$langs->trans("Status").' ('.$langs->trans("Buy").')</td><td colspan="3">'; print '<tr><td class="fieldrequired">'.$langs->trans("Status").' ('.$langs->trans("Buy").')</td><td colspan="3">';
print '<select class="flat" name="statut_buy">'; print '<select class="flat" name="statut_buy">';
if ($object->status_buy) if ($object->status_buy)
@ -987,6 +1009,30 @@ else
print '</select>'; print '</select>';
print '</td></tr>'; print '</td></tr>';
// Barcode
$showbarcode=(! empty($conf->barcode->enabled) && $user->rights->barcode->lire);
if ($showbarcode)
{
print '<tr><td>'.$langs->trans('BarcodeType').'</td><td>';
if (isset($_POST['fk_barcode_type']))
{
$fk_barcode_type=GETPOST('fk_barcode_type');
}
else
{
if (empty($fk_barcode_type) && ! empty($conf->global->PRODUIT_DEFAULT_BARCODE_TYPE)) $fk_barcode_type = $conf->global->PRODUIT_DEFAULT_BARCODE_TYPE;
}
require_once DOL_DOCUMENT_ROOT.'/core/class/html.formbarcode.class.php';
$formbarcode = new FormBarCode($db);
print $formbarcode->select_barcode_type($fk_barcode_type, 'fk_barcode_type', 1);
print '</td><td>'.$langs->trans("BarcodeValue").'</td><td>';
$tmpcode=isset($_POST['barcode'])?GETPOST('barcode'):$object->barcode;
if (empty($tmpcode) && ! empty($modBarCodeProduct->code_auto)) $tmpcode=$modBarCodeProduct->getNextValue($object,$type);
print '<input size="40" type="text" name="barcode" value="'.dol_escape_htmltag($tmpcode).'">';
print '</td></tr>';
}
// Description (used in invoice, propal...) // Description (used in invoice, propal...)
print '<tr><td valign="top">'.$langs->trans("Description").'</td><td colspan="3">'; print '<tr><td valign="top">'.$langs->trans("Description").'</td><td colspan="3">';
@ -1100,7 +1146,7 @@ else
print '<table class="border" width="100%">'; print '<table class="border" width="100%">';
// Accountancy_code_sell // Accountancy_code_sell
print '<tr><td>'.$langs->trans("ProductAccountancySellCode").'</td>'; print '<tr><td width="20%">'.$langs->trans("ProductAccountancySellCode").'</td>';
print '<td><input name="accountancy_code_sell" size="16" value="'.$object->accountancy_code_sell.'">'; print '<td><input name="accountancy_code_sell" size="16" value="'.$object->accountancy_code_sell.'">';
print '</td></tr>'; print '</td></tr>';

View File

@ -1,6 +1,6 @@
<?php <?php
/* Copyright (C) 2002-2006 Rodolphe Quiedeville <rodolphe@quiedeville.org> /* Copyright (C) 2002-2006 Rodolphe Quiedeville <rodolphe@quiedeville.org>
* Copyright (C) 2004-2010 Laurent Destailleur <eldy@users.sourceforge.net> * Copyright (C) 2004-2014 Laurent Destailleur <eldy@users.sourceforge.net>
* Copyright (C) 2004 Eric Seigne <eric.seigne@ryxeo.com> * Copyright (C) 2004 Eric Seigne <eric.seigne@ryxeo.com>
* Copyright (C) 2003 Brian Fraval <brian@fraval.org> * Copyright (C) 2003 Brian Fraval <brian@fraval.org>
* Copyright (C) 2006 Andre Cianfarani <acianfa@free.fr> * Copyright (C) 2006 Andre Cianfarani <acianfa@free.fr>
@ -208,8 +208,8 @@ class Societe extends CommonObject
$this->db->begin(); $this->db->begin();
// For automatic creation during create action (not used by Dolibarr GUI, can be used by scripts) // 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_client == -1) $this->get_codeclient($this,0);
if ($this->code_fournisseur == -1) $this->get_codefournisseur($this->prefix_comm,1); if ($this->code_fournisseur == -1) $this->get_codefournisseur($this,1);
// Check more parameters // Check more parameters
// If error, this->errors[] is filled // If error, this->errors[] is filled
@ -297,7 +297,14 @@ class Societe extends CommonObject
} }
} }
function create_individual($user) { /**
* Create a contact/address from thirdparty
*
* @param User $user Object user
* @return int <0 if KO, >0 if OK
*/
function create_individual($user)
{
require_once DOL_DOCUMENT_ROOT.'/contact/class/contact.class.php'; require_once DOL_DOCUMENT_ROOT.'/contact/class/contact.class.php';
$contact=new Contact($this->db); $contact=new Contact($this->db);
@ -313,11 +320,13 @@ class Societe extends CommonObject
$contact->zip = $this->zip; $contact->zip = $this->zip;
$contact->town = $this->town; $contact->town = $this->town;
$contact->phone_pro = $this->phone; $contact->phone_pro = $this->phone;
$result = $contact->create($user); $result = $contact->create($user);
if ($result < 0) { if ($result < 0)
{
$this->error = $contact->error; $this->error = $contact->error;
$this->errors = $contact->errors; $this->errors = $contact->errors;
dol_syslog("Societe::create_individual ERROR:" . $this->error, LOG_ERR); dol_syslog(get_class($this)."::create_individual ERROR:" . $this->error, LOG_ERR);
} }
return $result; return $result;
@ -325,6 +334,7 @@ class Societe extends CommonObject
/** /**
* Check properties of third party are ok (like name, third party codes, ...) * Check properties of third party are ok (like name, third party codes, ...)
* Used before an add or update.
* *
* @return int 0 if OK, <0 if KO * @return int 0 if OK, <0 if KO
*/ */
@ -342,10 +352,8 @@ class Societe extends CommonObject
$result = -2; $result = -2;
} }
if ($this->client && $this->codeclient_modifiable()) if ($this->client)
{ {
// On ne verifie le code client que si la societe est un client / prospect et que le code est modifiable
// Si il n'est pas modifiable il n'est pas mis a jour lors de l'update
$rescode = $this->check_codeclient(); $rescode = $this->check_codeclient();
if ($rescode <> 0) if ($rescode <> 0)
{ {
@ -369,10 +377,8 @@ class Societe extends CommonObject
} }
} }
if ($this->fournisseur && $this->codefournisseur_modifiable()) if ($this->fournisseur)
{ {
// On ne verifie le code fournisseur que si la societe est un fournisseur et que le code est modifiable
// Si il n'est pas modifiable il n'est pas mis a jour lors de l'update
$rescode = $this->check_codefournisseur(); $rescode = $this->check_codefournisseur();
if ($rescode <> 0) if ($rescode <> 0)
{ {
@ -407,7 +413,7 @@ class Societe extends CommonObject
* @param int $call_trigger 0=non, 1=oui * @param int $call_trigger 0=non, 1=oui
* @param int $allowmodcodeclient Inclut modif code client et code compta * @param int $allowmodcodeclient Inclut modif code client et code compta
* @param int $allowmodcodefournisseur Inclut modif code fournisseur et code compta fournisseur * @param int $allowmodcodefournisseur Inclut modif code fournisseur et code compta fournisseur
* @param string $action 'create' or 'update' * @param string $action 'add' or 'update'
* @param int $nosyncmember Do not synchronize info of linked member * @param int $nosyncmember Do not synchronize info of linked member
* @return int <0 if KO, >=0 if OK * @return int <0 if KO, >=0 if OK
*/ */
@ -467,8 +473,8 @@ class Societe extends CommonObject
$this->barcode=trim($this->barcode); $this->barcode=trim($this->barcode);
// For automatic creation // For automatic creation
if ($this->code_client == -1) $this->get_codeclient($this->prefix_comm,0); if ($this->code_client == -1) $this->get_codeclient($this,0);
if ($this->code_fournisseur == -1) $this->get_codefournisseur($this->prefix_comm,1); if ($this->code_fournisseur == -1) $this->get_codefournisseur($this,1);
$this->code_compta=trim($this->code_compta); $this->code_compta=trim($this->code_compta);
$this->code_compta_fournisseur=trim($this->code_compta_fournisseur); $this->code_compta_fournisseur=trim($this->code_compta_fournisseur);
@ -517,7 +523,7 @@ class Societe extends CommonObject
// Check name is required and codes are ok or unique. // Check name is required and codes are ok or unique.
// If error, this->errors[] is filled // If error, this->errors[] is filled
$result = $this->verify(); if ($action != 'add') $result = $this->verify(); // We don't check when update called during a create because verify was already done
if ($result >= 0) if ($result >= 0)
{ {
@ -574,16 +580,12 @@ class Societe extends CommonObject
if ($customer) if ($customer)
{ {
//$this->check_codeclient();
$sql .= ", code_client = ".(! empty($this->code_client)?"'".$this->db->escape($this->code_client)."'":"null"); $sql .= ", code_client = ".(! empty($this->code_client)?"'".$this->db->escape($this->code_client)."'":"null");
$sql .= ", code_compta = ".(! empty($this->code_compta)?"'".$this->db->escape($this->code_compta)."'":"null"); $sql .= ", code_compta = ".(! empty($this->code_compta)?"'".$this->db->escape($this->code_compta)."'":"null");
} }
if ($supplier) if ($supplier)
{ {
//$this->check_codefournisseur();
$sql .= ", code_fournisseur = ".(! empty($this->code_fournisseur)?"'".$this->db->escape($this->code_fournisseur)."'":"null"); $sql .= ", code_fournisseur = ".(! empty($this->code_fournisseur)?"'".$this->db->escape($this->code_fournisseur)."'":"null");
$sql .= ", code_compta_fournisseur = ".(! empty($this->code_compta_fournisseur)?"'".$this->db->escape($this->code_compta_fournisseur)."'":"null"); $sql .= ", code_compta_fournisseur = ".(! empty($this->code_compta_fournisseur)?"'".$this->db->escape($this->code_compta_fournisseur)."'":"null");
} }
@ -1815,19 +1817,20 @@ class Societe extends CommonObject
global $conf; global $conf;
if (! empty($conf->global->SOCIETE_CODECLIENT_ADDON)) if (! empty($conf->global->SOCIETE_CODECLIENT_ADDON))
{ {
$module=$conf->global->SOCIETE_CODECLIENT_ADDON;
$dirsociete=array_merge(array('/core/modules/societe/'),$conf->modules_parts['societe']); $dirsociete=array_merge(array('/core/modules/societe/'),$conf->modules_parts['societe']);
foreach ($dirsociete as $dirroot) foreach ($dirsociete as $dirroot)
{ {
$res=dol_include_once($dirroot.$conf->global->SOCIETE_CODECLIENT_ADDON.'.php'); $res=dol_include_once($dirroot.$module.'.php');
if ($res) break; if ($res) break;
} }
$var = $conf->global->SOCIETE_CODECLIENT_ADDON; $mod = new $module();
$mod = new $var;
$this->code_client = $mod->getNextValue($objsoc,$type); $this->code_client = $mod->getNextValue($objsoc,$type);
$this->prefixCustomerIsRequired = $mod->prefixIsRequired; $this->prefixCustomerIsRequired = $mod->prefixIsRequired;
dol_syslog(get_class($this)."::get_codeclient code_client=".$this->code_client." module=".$var); dol_syslog(get_class($this)."::get_codeclient code_client=".$this->code_client." module=".$module);
} }
} }
@ -1844,18 +1847,19 @@ class Societe extends CommonObject
global $conf; global $conf;
if (! empty($conf->global->SOCIETE_CODECLIENT_ADDON)) if (! empty($conf->global->SOCIETE_CODECLIENT_ADDON))
{ {
$module=$conf->global->SOCIETE_CODECLIENT_ADDON;
$dirsociete=array_merge(array('/core/modules/societe/'),$conf->modules_parts['societe']); $dirsociete=array_merge(array('/core/modules/societe/'),$conf->modules_parts['societe']);
foreach ($dirsociete as $dirroot) foreach ($dirsociete as $dirroot)
{ {
$res=dol_include_once($dirroot.$conf->global->SOCIETE_CODECLIENT_ADDON.'.php'); $res=dol_include_once($dirroot.$module.'.php');
if ($res) break; if ($res) break;
} }
$var = $conf->global->SOCIETE_CODECLIENT_ADDON; $mod = new $module();
$mod = new $var;
$this->code_fournisseur = $mod->getNextValue($objsoc,$type); $this->code_fournisseur = $mod->getNextValue($objsoc,$type);
dol_syslog(get_class($this)."::get_codefournisseur code_fournisseur=".$this->code_fournisseur." module=".$var); dol_syslog(get_class($this)."::get_codefournisseur code_fournisseur=".$this->code_fournisseur." module=".$module);
} }
} }
@ -1863,25 +1867,25 @@ class Societe extends CommonObject
* Verifie si un code client est modifiable en fonction des parametres * Verifie si un code client est modifiable en fonction des parametres
* du module de controle des codes. * du module de controle des codes.
* *
* @return int 0=Non, 1=Oui * @return int 0=No, 1=Yes
*/ */
function codeclient_modifiable() function codeclient_modifiable()
{ {
global $conf; global $conf;
if (! empty($conf->global->SOCIETE_CODECLIENT_ADDON)) if (! empty($conf->global->SOCIETE_CODECLIENT_ADDON))
{ {
$module=$conf->global->SOCIETE_CODECLIENT_ADDON;
$dirsociete=array_merge(array('/core/modules/societe/'),$conf->modules_parts['societe']); $dirsociete=array_merge(array('/core/modules/societe/'),$conf->modules_parts['societe']);
foreach ($dirsociete as $dirroot) foreach ($dirsociete as $dirroot)
{ {
$res=dol_include_once($dirroot.$conf->global->SOCIETE_CODECLIENT_ADDON.'.php'); $res=dol_include_once($dirroot.$module.'.php');
if ($res) break; if ($res) break;
} }
$var = $conf->global->SOCIETE_CODECLIENT_ADDON; $mod = new $module();
$mod = new $var; dol_syslog(get_class($this)."::codeclient_modifiable code_client=".$this->code_client." module=".$module);
dol_syslog(get_class($this)."::codeclient_modifiable code_client=".$this->code_client." module=".$var);
if ($mod->code_modifiable_null && ! $this->code_client) return 1; if ($mod->code_modifiable_null && ! $this->code_client) return 1;
if ($mod->code_modifiable_invalide && $this->check_codeclient() < 0) return 1; if ($mod->code_modifiable_invalide && $this->check_codeclient() < 0) return 1;
if ($mod->code_modifiable) return 1; // A mettre en dernier if ($mod->code_modifiable) return 1; // A mettre en dernier
@ -1897,25 +1901,25 @@ class Societe extends CommonObject
/** /**
* Verifie si un code fournisseur est modifiable dans configuration du module de controle des codes * Verifie si un code fournisseur est modifiable dans configuration du module de controle des codes
* *
* @return int 0=Non, 1=Oui * @return int 0=No, 1=Yes
*/ */
function codefournisseur_modifiable() function codefournisseur_modifiable()
{ {
global $conf; global $conf;
if (! empty($conf->global->SOCIETE_CODECLIENT_ADDON)) if (! empty($conf->global->SOCIETE_CODECLIENT_ADDON))
{ {
$module=$conf->global->SOCIETE_CODECLIENT_ADDON;
$dirsociete=array_merge(array('/core/modules/societe/'),$conf->modules_parts['societe']); $dirsociete=array_merge(array('/core/modules/societe/'),$conf->modules_parts['societe']);
foreach ($dirsociete as $dirroot) foreach ($dirsociete as $dirroot)
{ {
$res=dol_include_once($dirroot.$conf->global->SOCIETE_CODECLIENT_ADDON.'.php'); $res=dol_include_once($dirroot.$module.'.php');
if ($res) break; if ($res) break;
} }
$var = $conf->global->SOCIETE_CODECLIENT_ADDON; $mod = new $module();
$mod = new $var; dol_syslog(get_class($this)."::codefournisseur_modifiable code_founisseur=".$this->code_fournisseur." module=".$module);
dol_syslog(get_class($this)."::codefournisseur_modifiable code_founisseur=".$this->code_fournisseur." module=".$var);
if ($mod->code_modifiable_null && ! $this->code_fournisseur) return 1; if ($mod->code_modifiable_null && ! $this->code_fournisseur) return 1;
if ($mod->code_modifiable_invalide && $this->check_codefournisseur() < 0) return 1; if ($mod->code_modifiable_invalide && $this->check_codefournisseur() < 0) return 1;
if ($mod->code_modifiable) return 1; // A mettre en dernier if ($mod->code_modifiable) return 1; // A mettre en dernier
@ -1942,18 +1946,18 @@ class Societe extends CommonObject
global $conf; global $conf;
if (! empty($conf->global->SOCIETE_CODECLIENT_ADDON)) if (! empty($conf->global->SOCIETE_CODECLIENT_ADDON))
{ {
$module=$conf->global->SOCIETE_CODECLIENT_ADDON;
$dirsociete=array_merge(array('/core/modules/societe/'),$conf->modules_parts['societe']); $dirsociete=array_merge(array('/core/modules/societe/'),$conf->modules_parts['societe']);
foreach ($dirsociete as $dirroot) foreach ($dirsociete as $dirroot)
{ {
$res=dol_include_once($dirroot.$conf->global->SOCIETE_CODECLIENT_ADDON.'.php'); $res=dol_include_once($dirroot.$module.'.php');
if ($res) break; if ($res) break;
} }
$var = $conf->global->SOCIETE_CODECLIENT_ADDON; $mod = new $module();
$mod = new $var; dol_syslog(get_class($this)."::check_codeclient code_client=".$this->code_client." module=".$module);
dol_syslog(get_class($this)."::check_codeclient code_client=".$this->code_client." module=".$var);
$result = $mod->verif($this->db, $this->code_client, $this, 0); $result = $mod->verif($this->db, $this->code_client, $this, 0);
return $result; return $result;
} }
@ -1977,18 +1981,18 @@ class Societe extends CommonObject
global $conf; global $conf;
if (! empty($conf->global->SOCIETE_CODECLIENT_ADDON)) if (! empty($conf->global->SOCIETE_CODECLIENT_ADDON))
{ {
$module=$conf->global->SOCIETE_CODECLIENT_ADDON;
$dirsociete=array_merge(array('/core/modules/societe/'),$conf->modules_parts['societe']); $dirsociete=array_merge(array('/core/modules/societe/'),$conf->modules_parts['societe']);
foreach ($dirsociete as $dirroot) foreach ($dirsociete as $dirroot)
{ {
$res=dol_include_once($dirroot.$conf->global->SOCIETE_CODECLIENT_ADDON.'.php'); $res=dol_include_once($dirroot.$module.'.php');
if ($res) break; if ($res) break;
} }
$var = $conf->global->SOCIETE_CODECLIENT_ADDON; $mod = new $module();
$mod = new $var; dol_syslog(get_class($this)."::check_codefournisseur code_fournisseur=".$this->code_fournisseur." module=".$module);
dol_syslog(get_class($this)."::check_codefournisseur code_fournisseur=".$this->code_fournisseur." module=".$var);
$result = $mod->verif($this->db, $this->code_fournisseur, $this, 1); $result = $mod->verif($this->db, $this->code_fournisseur, $this, 1);
return $result; return $result;
} }

View File

@ -789,8 +789,8 @@ else
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>'; print '<table class="nobordernopadding"><tr><td>';
$tmpcode=$object->code_client; $tmpcode=$object->code_client;
if ($modCodeClient->code_auto) $tmpcode=$modCodeClient->getNextValue($object,0); if (empty($tmpcode) && ! empty($modCodeClient->code_auto)) $tmpcode=$modCodeClient->getNextValue($object,0);
print '<input type="text" name="code_client" size="16" value="'.$tmpcode.'" maxlength="15">'; print '<input type="text" name="code_client" size="16" value="'.dol_escape_htmltag($tmpcode).'" maxlength="15">';
print '</td><td>'; print '</td><td>';
$s=$modCodeClient->getToolTip($langs,$object,0); $s=$modCodeClient->getToolTip($langs,$object,0);
print $form->textwithpicto('',$s,1); print $form->textwithpicto('',$s,1);
@ -807,8 +807,8 @@ else
print '<td>'.$langs->trans('SupplierCode').'</td><td>'; print '<td>'.$langs->trans('SupplierCode').'</td><td>';
print '<table class="nobordernopadding"><tr><td>'; print '<table class="nobordernopadding"><tr><td>';
$tmpcode=$object->code_fournisseur; $tmpcode=$object->code_fournisseur;
if ($modCodeFournisseur->code_auto) $tmpcode=$modCodeFournisseur->getNextValue($object,1); if (empty($tmpcode) && ! empty($modCodeFournisseur->code_auto)) $tmpcode=$modCodeFournisseur->getNextValue($object,1);
print '<input type="text" name="code_fournisseur" size="16" value="'.$tmpcode.'" maxlength="15">'; print '<input type="text" name="code_fournisseur" size="16" value="'.dol_escape_htmltag($tmpcode).'" maxlength="15">';
print '</td><td>'; print '</td><td>';
$s=$modCodeFournisseur->getToolTip($langs,$object,1); $s=$modCodeFournisseur->getToolTip($langs,$object,1);
print $form->textwithpicto('',$s,1); print $form->textwithpicto('',$s,1);
@ -1189,8 +1189,8 @@ else
if ((!$object->code_client || $object->code_client == -1) && $modCodeClient->code_auto) if ((!$object->code_client || $object->code_client == -1) && $modCodeClient->code_auto)
{ {
$tmpcode=$object->code_client; $tmpcode=$object->code_client;
if (empty($tmpcode) && $modCodeClient->code_auto) $tmpcode=$modCodeClient->getNextValue($object,0); if (empty($tmpcode) && ! empty($modCodeClient->code_auto)) $tmpcode=$modCodeClient->getNextValue($object,0);
print '<input type="text" name="code_client" size="16" value="'.$tmpcode.'" maxlength="15">'; print '<input type="text" name="code_client" size="16" value="'.dol_escape_htmltag($tmpcode).'" maxlength="15">';
} }
else if ($object->codeclient_modifiable()) else if ($object->codeclient_modifiable())
{ {
@ -1221,8 +1221,8 @@ else
if ((!$object->code_fournisseur || $object->code_fournisseur == -1) && $modCodeFournisseur->code_auto) if ((!$object->code_fournisseur || $object->code_fournisseur == -1) && $modCodeFournisseur->code_auto)
{ {
$tmpcode=$object->code_fournisseur; $tmpcode=$object->code_fournisseur;
if (empty($tmpcode) && $modCodeFournisseur->code_auto) $tmpcode=$modCodeFournisseur->getNextValue($object,1); if (empty($tmpcode) && ! empty($modCodeFournisseur->code_auto)) $tmpcode=$modCodeFournisseur->getNextValue($object,1);
print '<input type="text" name="code_fournisseur" size="16" value="'.$tmpcode.'" maxlength="15">'; print '<input type="text" name="code_fournisseur" size="16" value="'.dol_escape_htmltag($tmpcode).'" maxlength="15">';
} }
else if ($object->codefournisseur_modifiable()) else if ($object->codefournisseur_modifiable())
{ {