diff --git a/ChangeLog b/ChangeLog index dc930fe37ac..9c5f1a5c166 100644 --- a/ChangeLog +++ b/ChangeLog @@ -39,13 +39,14 @@ For developers: - New: Triggers OPENSURVEY_CREATE, OPENSURVEY_DELETE added. - New: Add new hook function addMoreActionsButtons to allow a module to add/replace action buttons into an element. +- New: Normalize code for barcode generation to match other modules. WARNING: Following change may create regression for some external modules, but was necessary to make Dolibarr better: - The deprecated way (with 4 parameters) to declare a new tab into a module descriptor file has been removed. You must now use the 6 parameters way. See file modMyModule.class.php for example. - +- ***** ChangeLog for 3.5 compared to 3.4.* ***** For users: diff --git a/htdocs/admin/barcode.php b/htdocs/admin/barcode.php index 2e815919672..0d8f36f84ea 100644 --- a/htdocs/admin/barcode.php +++ b/htdocs/admin/barcode.php @@ -108,7 +108,7 @@ clearstatcache(); // Scan list of all barcode included provided by external modules -$dirbarcode=array_merge(array("/core/modules/barcode/"), $conf->modules_parts['barcode']); +$dirbarcode=array_merge(array("/core/modules/barcode/doc/"), $conf->modules_parts['barcode']); foreach($dirbarcode as $reldir) { @@ -289,8 +289,8 @@ if (! isset($_SERVER['WINDIR'])) print ''; } -// Module produits -if (! empty($conf->societe->enabled)) +// Module products +if (! empty($conf->product->enabled)) { $var=!$var; print "
"; @@ -307,8 +307,8 @@ if (! empty($conf->societe->enabled)) print '
'; } -// Module produits -if (! empty($conf->product->enabled)) +// Module thirdparty +if (! empty($conf->societe->enabled)) { $var=!$var; print "
"; diff --git a/htdocs/barcode/printsheet.php b/htdocs/barcode/printsheet.php index 4230ffe4ba2..5e2e52366fc 100644 --- a/htdocs/barcode/printsheet.php +++ b/htdocs/barcode/printsheet.php @@ -129,7 +129,7 @@ if ($action == 'builddoc') dol_mkdir($diroutput); // Generate barcode - $dirbarcode=array_merge(array("/core/modules/barcode/"),$conf->modules_parts['barcode']); + $dirbarcode=array_merge(array("/core/modules/barcode/doc/"),$conf->modules_parts['barcode']); foreach($dirbarcode as $reldir) { diff --git a/htdocs/core/modules/barcode/phpbarcode.modules.php b/htdocs/core/modules/barcode/doc/phpbarcode.modules.php similarity index 98% rename from htdocs/core/modules/barcode/phpbarcode.modules.php rename to htdocs/core/modules/barcode/doc/phpbarcode.modules.php index 2d29405ed9e..9d42acb4722 100644 --- a/htdocs/core/modules/barcode/phpbarcode.modules.php +++ b/htdocs/core/modules/barcode/doc/phpbarcode.modules.php @@ -18,12 +18,12 @@ */ /** - * \file htdocs/core/modules/barcode/phpbarcode.modules.php + * \file htdocs/core/modules/barcode/doc/phpbarcode.modules.php * \ingroup barcode * \brief File with class to generate barcode images using php barcode generator */ -require_once DOL_DOCUMENT_ROOT.'/core/modules/barcode/modules_barcode.php'; +require_once DOL_DOCUMENT_ROOT.'/core/modules/barcode/modules_barcode.class.php'; require_once DOL_DOCUMENT_ROOT.'/core/lib/barcode.lib.php'; // This is to include def like $genbarcode_loc and $font_loc diff --git a/htdocs/core/modules/barcode/mod_barcode_standard.php b/htdocs/core/modules/barcode/mod_barcode_standard.php new file mode 100644 index 00000000000..d1963c992f8 --- /dev/null +++ b/htdocs/core/modules/barcode/mod_barcode_standard.php @@ -0,0 +1,280 @@ + + * Copyright (C) 2006-2014 Laurent Destailleur + * Copyright (C) 2007-2012 Regis Houssin + * Copyright (C) 2011 Juanjo Menent + * + * 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 3 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, see . + * or see http://www.gnu.org/ + */ + +/** + * \file htdocs/core/modules/product/mod_barcode_standard.php + * \ingroup barcode + * \brief File of class to manage barcode numbering with standard rule + */ + +require_once DOL_DOCUMENT_ROOT.'/core/modules/barcode/modules_barcode.class.php'; + + +/** + * Class to manage barcode with standard rule + */ +class mod_barcode_standard extends ModeleNumRefBarCode +{ + var $nom='Standard'; // 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 + var $version='dolibarr'; // 'development', 'experimental', 'dolibarr' + var $code_auto; // Numerotation automatique + + var $searchcode; // String de recherche + var $numbitcounter; // Nombre de chiffres du compteur + var $prefixIsRequired; // Le champ prefix du tiers doit etre renseigne quand on utilise {pre} + + + /** + * Constructor + */ + function __construct() + { + $this->code_null = 0; + $this->code_modifiable = 1; + $this->code_modifiable_invalide = 1; + $this->code_modifiable_null = 1; + $this->code_auto = 1; + $this->prefixIsRequired = 0; + } + + + /** Return description of module + * + * @param string $langs Object langs + * @return string Description of module + */ + function info($langs) + { + global $conf, $mc; + global $form; + + $langs->load("products"); + + $disabled = ((! empty($mc->sharings['referent']) && $mc->sharings['referent'] != $conf->entity) ? ' disabled="disabled"' : ''); + + $texte = $langs->trans('GenericNumRefModelDesc')."
\n"; + $texte.= ''; + $texte.= ''; + $texte.= ''; + $texte.= ''; + $texte.= ''; + + $tooltip=$langs->trans("GenericMaskCodes",$langs->transnoentities("Product"),$langs->transnoentities("Product")); + $tooltip.=$langs->trans("GenericMaskCodes3"); + $tooltip.=$langs->trans("GenericMaskCodes4c"); + $tooltip.=$langs->trans("GenericMaskCodes5"); + + // Mask parameter + $texte.= ''; + $texte.= ''; + $texte.= ''; + $texte.= ''; + + $texte.= '
'.$langs->trans("Mask").' ('.$langs->trans("BarCodeModel").'):'.$form->textwithpicto('',$tooltip,1,1).' 
'; + $texte.= ''; + + return $texte; + } + + + /** + * Return an example of result returned by getNextValue + * + * @param Translate $langs Object langs + * @param product $objproduct Object product + * @param int $type Type of third party (1:customer, 2:supplier, -1:autodetect) + * @return string Return string example + */ + function getExample($langs,$objproduct=0,$type=-1) + { + if ($type == 0 || $type == -1) + { + $exampleproduct = $this->getNextValue($objproduct,0); + if (! $exampleproduct) + { + $exampleproduct = $langs->trans('NotConfigured'); + } + if($exampleproduct=="ErrorBadMask") + { + $langs->load("errors"); + $exampleproduct=$langs->trans($exampleproduct); + } + } + if ($type == 1 || $type == -1) + { + $exampleservice = $this->getNextValue($objproduct,1); + if (! $exampleservice) + { + $exampleservice = $langs->trans('NotConfigured'); + } + if($exampleservice=="ErrorBadMask") + { + $langs->load("errors"); + $exampleservice=$langs->trans($exampleservice); + } + } + + if ($type == 0) return $exampleproduct; + if ($type == 1) return $exampleservice; + return $exampleproduct.'
'.$exampleservice; + } + + /** + * Return next value + * + * @param Product $objproduct Object product + * @param string $type type of barcode (EAN, ISBN, ...) + * @return string Value if OK, '' if module not configured, <0 if KO + */ + function getNextValue($objproduct,$type='') + { + global $db,$conf; + + require_once DOL_DOCUMENT_ROOT .'/core/lib/functions2.lib.php'; + + // TODO + + // Get Mask value + $mask = ''; + if (! empty($conf->global->BARCODE_STANDARD_MASK)) $mask = $conf->global->BARCODE_STANDARD_MASK; + + if (empty($mask)) + { + $this->error='NotConfigured'; + return ''; + } + + $field='barcode';$where=''; + + $now=dol_now(); + + $numFinal=get_next_value($db,$mask,'product',$field,$where,'',$now); + + return $numFinal; + } + + + /** + * Check if mask/numbering use prefix + * + * @return int 0 or 1 + */ + function verif_prefixIsUsed() + { + global $conf; + + $mask = $conf->global->BARCODE_STANDARD_MASK; + if (preg_match('/\{pre\}/i',$mask)) return 1; + + return 0; + } + + + /** + * Check validity of code according to its rules + * + * @param DoliDB $db Database handler + * @param string &$code Code to check/correct + * @param Product $product Object product + * @param int $type 0 = customer/prospect , 1 = supplier + * @return int 0 if OK + * -1 ErrorBadCustomerCodeSyntax + * -2 ErrorCustomerCodeRequired + * -3 ErrorCustomerCodeAlreadyUsed + * -4 ErrorPrefixRequired + */ + function verif($db, &$code, $product, $type) + { + global $conf; + + require_once DOL_DOCUMENT_ROOT .'/core/lib/functions2.lib.php'; + + $result=0; + $code = strtoupper(trim($code)); + + 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 + $mask = ''; + if ($type==0) $mask = empty($conf->global->PRODUCT_ELEPHANT_MASK_PRODUCT)?'':$conf->global->PRODUCT_ELEPHANT_MASK_PRODUCT; + if ($type==1) $mask = empty($conf->global->PRODUCT_ELEPHANT_MASK_SSERVICE)?'':$conf->global->PRODUCT_ELEPHANT_MASK_SERVICE; + if (! $mask) + { + $this->error='NotConfigured'; + return ''; + } + + $result=check_value($mask,$code); + } + + dol_syslog("mod_codeclient_elephant::verif type=".$type." result=".$result); + return $result; + } + + + /** + * Renvoi si un code est pris ou non (par autre tiers) + * + * @param DoliDB $db Handler acces base + * @param string $code Code a verifier + * @param Product $product Objet product + * @return int 0 if available, <0 if KO + */ + function verif_dispo($db, $code, $product) + { + $sql = "SELECT ref FROM ".MAIN_DB_PREFIX."product"; + $sql.= " WHERE ref = '".$code."'"; + if ($product->id > 0) $sql.= " AND rowid <> ".$product->id; + + $resql=$db->query($sql); + if ($resql) + { + if ($db->num_rows($resql) == 0) + { + return 0; + } + else + { + return -1; + } + } + else + { + return -2; + } + + } + +} + +?> diff --git a/htdocs/core/modules/barcode/modules_barcode.php b/htdocs/core/modules/barcode/modules_barcode.class.php similarity index 65% rename from htdocs/core/modules/barcode/modules_barcode.php rename to htdocs/core/modules/barcode/modules_barcode.class.php index ae67d92396f..6e84a65a6aa 100644 --- a/htdocs/core/modules/barcode/modules_barcode.php +++ b/htdocs/core/modules/barcode/modules_barcode.class.php @@ -1,8 +1,5 @@ - * Copyright (C) 2004-2007 Laurent Destailleur - * Copyright (C) 2004 Eric Seigne - * Copyright (C) 2005-2011 Regis Houssin +/* Copyright (C) 2014 Laurent Destailleur * * 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 @@ -20,16 +17,15 @@ */ /** - * \file htdocs/core/modules/barcode/modules_barcode.php + * \file htdocs/core/modules/barcode/modules_barcode.class.php * \ingroup barcode - * \brief Fichier contenant la classe mere de generation des codes barres + * \brief File with parent classes for barcode document modules and numbering modules */ require_once DOL_DOCUMENT_ROOT.'/core/lib/functions.lib.php'; /** - * \class ModeleBarCode - * \brief Classe mere des modeles de code barre + * Parent class for barcode document modules */ abstract class ModeleBarCode { @@ -46,6 +42,18 @@ abstract class ModeleBarCode return true; } +} + + +/** + * Parent class for barcode numbering modules + */ +abstract class ModeleNumRefBarCode +{ + var $error=''; + + + } ?> diff --git a/htdocs/product/fiche.php b/htdocs/product/fiche.php index ef6a94a30b1..3bfde064684 100644 --- a/htdocs/product/fiche.php +++ b/htdocs/product/fiche.php @@ -1,6 +1,6 @@ - * Copyright (C) 2004-2012 Laurent Destailleur + * Copyright (C) 2004-2014 Laurent Destailleur * Copyright (C) 2005 Eric Seigne * Copyright (C) 2005-2012 Regis Houssin * Copyright (C) 2006 Andre Cianfarani @@ -683,16 +683,32 @@ else { $module = substr($module, 0, dol_strlen($module)-4); } - dol_include_once('/core/modules/product/'.$module.'.php'); - $modCodeProduct = new $module; + $result=dol_include_once('/core/modules/product/'.$module.'.php'); + if ($result > 0) + { + $modCodeProduct = new $module(); + } + // Load object modBarCodeProduct + if (! empty($conf->global->PRODUIT_DEFAULT_BARCODE_TYPE)) + { + $module='mod_barcode_'.strtolower($conf->global->PRODUIT_DEFAULT_BARCODE_TYPE); + $result=dol_include_once('/core/modules/barcode/doc/'.$module.'.php'); + if ($result > 0) + { + $modBarCodeProduct =new $module(); + } + } + print '
'; print ''; print ''; print ''."\n"; if (! empty($modCodeProduct->code_auto)) print ''; - + if (! empty($modBarCodeProduct->code_auto)) + print ''; + if ($type==1) $title=$langs->trans("NewService"); else $title=$langs->trans("NewProduct"); print_fiche_titre($title); @@ -700,8 +716,7 @@ else print ''; print ''; $tmpcode=''; - if (! empty($modCodeProduct->code_auto)) - $tmpcode=$modCodeProduct->getNextValue($object,$type); + if (! empty($modCodeProduct->code_auto)) $tmpcode=$modCodeProduct->getNextValue($object,$type); print ''; } diff --git a/htdocs/viewimage.php b/htdocs/viewimage.php index 4a9e7538faa..9e22bb94cc2 100644 --- a/htdocs/viewimage.php +++ b/htdocs/viewimage.php @@ -139,7 +139,7 @@ if ($modulepart == 'barcode') exit; } - $dirbarcode=array_merge(array("/core/modules/barcode/"),$conf->modules_parts['barcode']); + $dirbarcode=array_merge(array("/core/modules/barcode/doc/"),$conf->modules_parts['barcode']); $result=0;
'.$langs->trans("Ref").''; if ($_error) { @@ -742,7 +757,7 @@ else print $formbarcode->select_barcode_type($fk_barcode_type, 'fk_barcode_type', 1); print ''.$langs->trans("BarcodeValue").''; $tmpcode=isset($_POST['barcode'])?GETPOST('barcode'):$object->barcode; - //if (empty($tmpcode) $tmpcode=$modBarCodeProduct->getNextValue($object,0); + if (! empty($modBarCodeProduct->code_auto)) $tmpcode=$modBarCodeProduct->getNextValue($object,$type); print ''; print '