From fa53147d0a529875b9963d465172ad382c94abba Mon Sep 17 00:00:00 2001 From: jfefe Date: Sat, 16 Feb 2013 03:41:11 +0100 Subject: [PATCH 01/12] Retrieve extrafields when fetch thirparty Work on extrafields support in thirpdparty ODT document --- htdocs/core/class/commondocgenerator.class.php | 13 ++++++++++++- htdocs/societe/class/societe.class.php | 14 ++++++++++++++ 2 files changed, 26 insertions(+), 1 deletion(-) diff --git a/htdocs/core/class/commondocgenerator.class.php b/htdocs/core/class/commondocgenerator.class.php index 8c8d79f7422..ec9ae1d2870 100755 --- a/htdocs/core/class/commondocgenerator.class.php +++ b/htdocs/core/class/commondocgenerator.class.php @@ -134,7 +134,7 @@ abstract class CommonDocGenerator $object->state=getState($object->state_code,0); } - return array( + $array_thirdparty = array( 'company_name'=>$object->name, 'company_email'=>$object->email, 'company_phone'=>$object->phone, @@ -163,6 +163,17 @@ abstract class CommonDocGenerator 'company_idprof6'=>$object->idprof6, 'company_note'=>$object->note ); + + $extrafields = array(); + if(is_array($object->array_options) && count($object->array_options)) + { + foreach($object->array_options as $key=>$label) + { + $extrafields['company_options_'.$key] = $label; + } + $array_thirdparty = array_merge($array_thirdparty,$extrafields); + } + return $array_thirdparty; } /** diff --git a/htdocs/societe/class/societe.class.php b/htdocs/societe/class/societe.class.php index 0f5e7051010..28b38702fb9 100644 --- a/htdocs/societe/class/societe.class.php +++ b/htdocs/societe/class/societe.class.php @@ -139,6 +139,8 @@ class Societe extends CommonObject var $logo; var $logo_small; var $logo_mini; + + var $array_options; var $oldcopy; @@ -852,6 +854,18 @@ class Societe extends CommonObject $this->import_key = $obj->import_key; $result = 1; + + // Retreive all extrafield for thirdparty + // fetch optionals attributes and labels + $extrafields=new ExtraFields($this->db); + $extralabels=$extrafields->fetch_name_optionals_label('company',true); + if (count($extralabels)>0) { + $this->array_options = array(); + } + foreach($extrafields->attribute_label as $key=>$label) + { + $this->array_options[$key]=$label; + } } else { From 4f5b636cc74cee609eccd7b3d7452ffc9355934b Mon Sep 17 00:00:00 2001 From: jfefe Date: Sat, 16 Feb 2013 13:58:21 +0100 Subject: [PATCH 02/12] Fix : missing class file --- htdocs/societe/class/societe.class.php | 1 + 1 file changed, 1 insertion(+) diff --git a/htdocs/societe/class/societe.class.php b/htdocs/societe/class/societe.class.php index 28b38702fb9..dfeec3eaab7 100644 --- a/htdocs/societe/class/societe.class.php +++ b/htdocs/societe/class/societe.class.php @@ -857,6 +857,7 @@ class Societe extends CommonObject // Retreive all extrafield for thirdparty // fetch optionals attributes and labels + require_once(DOL_DOCUMENT_ROOT.'/core/class/extrafields.class.php'); $extrafields=new ExtraFields($this->db); $extralabels=$extrafields->fetch_name_optionals_label('company',true); if (count($extralabels)>0) { From 16e9f6db48770a70f433399edf06a20f721656b1 Mon Sep 17 00:00:00 2001 From: jfefe Date: Sun, 17 Feb 2013 14:37:33 +0100 Subject: [PATCH 03/12] Fix : bad name of property when retrieve extrafields for thirdparty --- htdocs/core/class/commondocgenerator.class.php | 2 +- htdocs/societe/class/societe.class.php | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/htdocs/core/class/commondocgenerator.class.php b/htdocs/core/class/commondocgenerator.class.php index ec9ae1d2870..d64a7c2710b 100755 --- a/htdocs/core/class/commondocgenerator.class.php +++ b/htdocs/core/class/commondocgenerator.class.php @@ -169,7 +169,7 @@ abstract class CommonDocGenerator { foreach($object->array_options as $key=>$label) { - $extrafields['company_options_'.$key] = $label; + $extrafields['company_'.$key] = $label; } $array_thirdparty = array_merge($array_thirdparty,$extrafields); } diff --git a/htdocs/societe/class/societe.class.php b/htdocs/societe/class/societe.class.php index dfeec3eaab7..7688eec0d66 100644 --- a/htdocs/societe/class/societe.class.php +++ b/htdocs/societe/class/societe.class.php @@ -865,7 +865,7 @@ class Societe extends CommonObject } foreach($extrafields->attribute_label as $key=>$label) { - $this->array_options[$key]=$label; + $this->array_options['options_'.$key]=$label; } } else From 060060f08ba00e41d499a068bbca6c3a6c17d375 Mon Sep 17 00:00:00 2001 From: jfefe Date: Sun, 17 Feb 2013 20:14:18 +0100 Subject: [PATCH 04/12] Missing object $langs when showing extrafield of type 'price' --- htdocs/core/class/extrafields.class.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/core/class/extrafields.class.php b/htdocs/core/class/extrafields.class.php index 4f583a667f9..ec02f906e70 100755 --- a/htdocs/core/class/extrafields.class.php +++ b/htdocs/core/class/extrafields.class.php @@ -669,7 +669,7 @@ class ExtraFields */ function showOutputField($key,$value,$moreparam='') { - global $conf; + global $conf,$langs; $label=$this->attribute_label[$key]; $type=$this->attribute_type[$key]; From 8ebb48cb5c9464865306c33cfec48bea86568398 Mon Sep 17 00:00:00 2001 From: jfefe Date: Sun, 17 Feb 2013 21:14:00 +0100 Subject: [PATCH 05/12] Fix : in ODT show value and not label of company extrafield --- htdocs/core/class/commondocgenerator.class.php | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/htdocs/core/class/commondocgenerator.class.php b/htdocs/core/class/commondocgenerator.class.php index d64a7c2710b..3b815e962c0 100755 --- a/htdocs/core/class/commondocgenerator.class.php +++ b/htdocs/core/class/commondocgenerator.class.php @@ -164,14 +164,20 @@ abstract class CommonDocGenerator 'company_note'=>$object->note ); - $extrafields = array(); + // Retrieve extrafields if(is_array($object->array_options) && count($object->array_options)) { - foreach($object->array_options as $key=>$label) + if(!class_exists('Extrafields')) + require_once DOL_DOCUMENT_ROOT.'/core/class/extrafields.class.php'; + $extrafields = new ExtraFields($this->db); + $extralabels = $extrafields->fetch_name_optionals_label('company',true); + //Get extrafield values + $object->fetch_optionals($object->id,$extralabels); + + foreach($extrafields->attribute_label as $key=>$label) { - $extrafields['company_'.$key] = $label; + $array_thirdparty=array_merge($array_thirdparty,array('company_options_'.$key => $object->array_options['options_'.$key])); } - $array_thirdparty = array_merge($array_thirdparty,$extrafields); } return $array_thirdparty; } From 3ef8c6e5dd33ed6106155e28a6c87ffc3e35929e Mon Sep 17 00:00:00 2001 From: jfefe Date: Mon, 18 Feb 2013 00:40:49 +0100 Subject: [PATCH 06/12] Missing variable declaration --- htdocs/core/class/extrafields.class.php | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/htdocs/core/class/extrafields.class.php b/htdocs/core/class/extrafields.class.php index ec02f906e70..f72ddc8d6e2 100755 --- a/htdocs/core/class/extrafields.class.php +++ b/htdocs/core/class/extrafields.class.php @@ -44,6 +44,10 @@ class ExtraFields var $attribute_unique; // Array to store if attribute is required or not var $attribute_required; + // Array to store parameters of attribute (used in select type) + var $attribute_param; + // Int to store position of attribute + var $attribute_pos; var $error; var $errno; From bd2d9cdd3e39282dc904e2ab26ee2d482a7d89e7 Mon Sep 17 00:00:00 2001 From: jfefe Date: Mon, 18 Feb 2013 00:41:50 +0100 Subject: [PATCH 07/12] Split extrafields display into 2 columns (thirdparty) --- htdocs/societe/soc.php | 57 ++++++++++++++++++++++++++++++++++-------- 1 file changed, 47 insertions(+), 10 deletions(-) diff --git a/htdocs/societe/soc.php b/htdocs/societe/soc.php index c1dd0c4c09d..ee8f6e984b1 100644 --- a/htdocs/societe/soc.php +++ b/htdocs/societe/soc.php @@ -998,14 +998,25 @@ else $reshook=$hookmanager->executeHooks('formObjectOptions',$parameters,$object,$action); // Note that $action and $object may have been modified by hook if (empty($reshook) && ! empty($extrafields->attribute_label)) { + $e=0; foreach($extrafields->attribute_label as $key=>$label) { + $colspan='3'; $value=(isset($_POST["options_".$key])?$_POST["options_".$key]:(isset($object->array_options["options_".$key])?$object->array_options["options_".$key]:'')); - print ''; + $colspan='0'; + } + print 'attribute_required[$key])) print ' class="fieldrequired"'; - print '>'.$label.''; + print '>'.$label.''; + print ''; print $extrafields->showInputField($key,$value); - print ''."\n"; + print ''; + + if (($e % 2) == 1) print ''."\n"; + $e++; } } @@ -1426,23 +1437,38 @@ else print ''; print ''; } - // Other attributes $parameters=array('colspan' => ' colspan="3"', 'colspanvalue' => '3'); $reshook=$hookmanager->executeHooks('formObjectOptions',$parameters,$object,$action); // Note that $action and $object may have been modified by hook if (empty($reshook) && ! empty($extrafields->attribute_label)) { + $old_pos=0; + $e=0; foreach($extrafields->attribute_label as $key=>$label) { + $colspan = '3'; $value=(isset($_POST["options_".$key])?$_POST["options_".$key]:$object->array_options["options_".$key]); - print ''."\n"; + $colspan = '0'; + } + print 'attribute_required[$key])) print ' class="fieldrequired"'; - print '>'.$label.''; + print '>'.$label.''."\n"; + print ''; print $extrafields->showInputField($key,$value); - print "\n"; + print ""."\n"; + + if (($e % 2) == 1 ) + { + print "\n"; + } + $old_pos = $extrafields->attribute_pos[$key]; + $e++; } } - // Logo print ''; print ''.$langs->trans("Logo").''; @@ -1756,12 +1782,23 @@ else $reshook=$hookmanager->executeHooks('formObjectOptions',$parameters,$object,$action); // Note that $action and $object may have been modified by hook if (empty($reshook) && ! empty($extrafields->attribute_label)) { + $e=0; foreach($extrafields->attribute_label as $key=>$label) { + $colspan='3'; $value=(isset($_POST["options_".$key])?$_POST["options_".$key]:(isset($object->array_options['options_'.$key])?$object->array_options['options_'.$key]:'')); - print ''.$label.''; + if (($e % 2) == 0) + { + print ''; + $colspan='0'; + } + print ''.$label.''; + print ''; print $extrafields->showOutputField($key,$value); - print "\n"; + print ""; + + if (($e % 2) == 1) print ''; + $e++; } } From 71a2b4c8c0a4653ca4cceec3a8b945cdce48b36c Mon Sep 17 00:00:00 2001 From: jfefe Date: Mon, 18 Feb 2013 00:58:40 +0100 Subject: [PATCH 08/12] In ODT document add currency symbol with extrafields of type "price" --- htdocs/core/class/commondocgenerator.class.php | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/htdocs/core/class/commondocgenerator.class.php b/htdocs/core/class/commondocgenerator.class.php index 3b815e962c0..aec9e74dcb8 100755 --- a/htdocs/core/class/commondocgenerator.class.php +++ b/htdocs/core/class/commondocgenerator.class.php @@ -171,11 +171,13 @@ abstract class CommonDocGenerator require_once DOL_DOCUMENT_ROOT.'/core/class/extrafields.class.php'; $extrafields = new ExtraFields($this->db); $extralabels = $extrafields->fetch_name_optionals_label('company',true); - //Get extrafield values - $object->fetch_optionals($object->id,$extralabels); foreach($extrafields->attribute_label as $key=>$label) { + if($extrafields->attribute_type[$key] == 'price') + { + $object->array_options['options_'.$key] = price($object->array_options['options_'.$key]).' '.$outputlangs->getCurrencySymbol($conf->currency); + } $array_thirdparty=array_merge($array_thirdparty,array('company_options_'.$key => $object->array_options['options_'.$key])); } } From d2cc6d299c70202a7ce7ca9858a24c7b5e104308 Mon Sep 17 00:00:00 2001 From: Grand Philippe Date: Mon, 18 Feb 2013 12:19:01 +0100 Subject: [PATCH 09/12] fix language --- htdocs/langs/fr_FR/admin.lang | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/langs/fr_FR/admin.lang b/htdocs/langs/fr_FR/admin.lang index b471e19b473..e92b474efe7 100644 --- a/htdocs/langs/fr_FR/admin.lang +++ b/htdocs/langs/fr_FR/admin.lang @@ -973,7 +973,7 @@ NotificationsDesc= La fonction des notifications par emails permet d'envoyer aut ModelModules=Modèle de documents DocumentModelOdt=Genération depuis des modèles OpenDocument (Fichier .ODT OpenOffice, KOffice, TextEdit...) WatermarkOnDraft=Filigrane sur les documents brouillons -CompanyIdProfChecker=Id professionel unique +CompanyIdProfChecker=Id professionnel unique MustBeUnique=Doit être unique ? MustBeMandatory=Doit être obligatoire? Miscellanous=Divers From 37e9b04d8389844ad56e0c57c222f1015a452bb8 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Mon, 18 Feb 2013 12:57:14 +0100 Subject: [PATCH 10/12] Fix: Check id field are mandatory --- htdocs/societe/soc.php | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/htdocs/societe/soc.php b/htdocs/societe/soc.php index c1dd0c4c09d..a83ac0ca517 100644 --- a/htdocs/societe/soc.php +++ b/htdocs/societe/soc.php @@ -222,19 +222,20 @@ if (empty($reshook)) { $langs->load("errors"); $error++; $errors[] = $langs->transcountry('ProfId'.$i, $object->country_code)." ".$langs->trans("ErrorProdIdAlreadyExist", $vallabel); - $action = ($action=='add'?'create':'edit'); + $action = (($action=='add'||$action=='create')?'create':'edit'); } } $idprof_mandatory ='SOCIETE_IDPROF'.($i).'_MANDATORY'; + if (! $vallabel && ! empty($conf->global->$idprof_mandatory)) { $langs->load("errors"); $error++; $errors[] = $langs->trans("ErrorProdIdIsMandatory", $langs->transcountry('ProfId'.$i, $object->country_code)); - $action = ($action=='add'?'create':'edit'); + $action = (($action=='add'||$action=='create')?'create':'edit'); } - } + } } if (! $error) @@ -712,8 +713,7 @@ else print "
\n"; } - - dol_htmloutput_errors($error,$errors); + dol_htmloutput_mesg(is_numeric($error)?'':$error, $errors, 'error'); print '
'; From 0a697e1033e30a69335c6a639249f5b1a991ed66 Mon Sep 17 00:00:00 2001 From: Grand Philippe Date: Mon, 18 Feb 2013 13:47:46 +0100 Subject: [PATCH 11/12] fix language --- htdocs/langs/fr_FR/admin.lang | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/htdocs/langs/fr_FR/admin.lang b/htdocs/langs/fr_FR/admin.lang index e92b474efe7..216d9b67de4 100644 --- a/htdocs/langs/fr_FR/admin.lang +++ b/htdocs/langs/fr_FR/admin.lang @@ -47,9 +47,9 @@ DictionnarySetup= Dictionnaires Dictionnary= Dictionnaires DisableJavascript= Désactiver les fonctions Javascript et Ajax ConfirmAjax= Utiliser les popups de confirmation Ajax -UseSearchToSelectCompany= Utiliser un champ avec autocomplétion pour choisir un tiers (plutôt qu'une liste déroulante).

Notez que si vous avez un nombre important de produits ou services (> 100 000), vous pouvez améliorer les performances en définissant la constante SOCIETE_DONOTSEARCH_ANYWHERE à 1 dans Configuration->Divers. La recherche sera alors limitée au début de la chaine. +UseSearchToSelectCompany= Utiliser un champ avec autocomplétion pour choisir un tiers (plutôt qu'une liste déroulante).

Notez que si vous avez un nombre important de tiers (> 100 000), vous pouvez améliorer les performances en définissant la constante SOCIETE_DONOTSEARCH_ANYWHERE à 1 dans Configuration->Divers. La recherche sera alors limitée au début de la chaine. ActivityStateToSelectCompany= Ajouter une option de filtrage lors des recherches pour afficher/masquer les tiers en exercice ou ayant cessés d'exercer -UseSearchToSelectContact= Utiliser un champ avec autocomplétion pour choisir un contact (plutôt qu'une liste déroulante).

Notez que si vous avez un nombre important de produits ou services (> 100 000), vous pouvez améliorer les performances en définissant la constante CONTACT_DONOTSEARCH_ANYWHERE à 1 dans Configuration->Divers. La recherche sera alors limitée au début de la chaine. +UseSearchToSelectContact= Utiliser un champ avec autocomplétion pour choisir un contact (plutôt qu'une liste déroulante).

Notez que si vous avez un nombre important de contacts (> 100 000), vous pouvez améliorer les performances en définissant la constante CONTACT_DONOTSEARCH_ANYWHERE à 1 dans Configuration->Divers. La recherche sera alors limitée au début de la chaine. SearchFilter=Options des filtres de recherche NumberOfKeyToSearch=Nb carac. déclenchant recherche: %s ViewFullDateActions= Visualiser les dates des actions en entier dans la fiche tiers From b484fef22a5909d9e55ca96c1dd28446e43047e2 Mon Sep 17 00:00:00 2001 From: Grand Philippe Date: Mon, 18 Feb 2013 14:19:01 +0100 Subject: [PATCH 12/12] fix language --- htdocs/langs/fr_FR/admin.lang | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/htdocs/langs/fr_FR/admin.lang b/htdocs/langs/fr_FR/admin.lang index 216d9b67de4..a43179386de 100644 --- a/htdocs/langs/fr_FR/admin.lang +++ b/htdocs/langs/fr_FR/admin.lang @@ -931,11 +931,11 @@ MAIN_PROXY_PORT=Port du serveur proxy mandataire MAIN_PROXY_USER=Login pour passer le serveur proxy mandataire MAIN_PROXY_PASS=Mot de passe pour passer le serveur proxy mandataire DefineHereComplementaryAttributes=Définissez ici la liste des attributs supplémentaires, non disponibles en standard, et que vous voulez voir gérer sur les %s. -ExtraFields=Attributs suplémentaires -ExtraFieldsThirdParties=Attributs suplémentaires (tiers) -ExtraFieldsContacts=Attributs suplémentaires (contacts/adresses) -ExtraFieldsMember=Attributs suplémentaires (adhérents) -ExtraFieldsMemberType=Attributs suplémentaires (type d'adhérents) +ExtraFields=Attributs supplémentaires +ExtraFieldsThirdParties=Attributs supplémentaires (tiers) +ExtraFieldsContacts=Attributs supplémentaires (contacts/adresses) +ExtraFieldsMember=Attributs supplémentaires (adhérents) +ExtraFieldsMemberType=Attributs supplémentaires (type d'adhérents) ExtraFieldHasWrongValue=L'attribut %s a une valeur incorrecte. AlphaNumOnlyCharsAndNoSpace=uniquement caractères alphanumériques sans espace SendingMailSetup=Configuration de l'envoi par mail