From 0b56923de56281a98852c668f1190702bc542049 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Thu, 28 Jun 2012 19:49:54 +0200 Subject: [PATCH 1/3] Fix: Panicum module for supplier accountancy code --- htdocs/core/modules/societe/mod_codecompta_panicum.php | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/htdocs/core/modules/societe/mod_codecompta_panicum.php b/htdocs/core/modules/societe/mod_codecompta_panicum.php index 06790783d48..3946b9d1569 100644 --- a/htdocs/core/modules/societe/mod_codecompta_panicum.php +++ b/htdocs/core/modules/societe/mod_codecompta_panicum.php @@ -78,7 +78,8 @@ class mod_codecompta_panicum extends ModeleAccountancyCode function get_code($db, $societe, $type='') { // Renvoie toujours ok - $this->code = $societe->code_compta; + if ($type == 'supplier') $this->code = $societe->code_compta_fournisseur; + else $this->code = $societe->code_compta; return 0; } } From 52c2d391942c11278094c0caa5542a1202610b2f Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Thu, 28 Jun 2012 19:59:33 +0200 Subject: [PATCH 2/3] Fix: Can't modifiy accountancy code sell --- htdocs/product/fiche.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/product/fiche.php b/htdocs/product/fiche.php index 4cedfecf2d7..cf0d74b2df3 100644 --- a/htdocs/product/fiche.php +++ b/htdocs/product/fiche.php @@ -126,7 +126,7 @@ if (empty($reshook)) $action=""; } - if ($action == 'setaccountancy_code_buy') + if ($action == 'setaccountancy_code_sell') { $object->fetch($id,$ref); $result = $object->setValueFrom('accountancy_code_sell', $_POST['accountancy_code_sell']); From 18ae5ff6ea2941b917e16442963c880abc1ccca4 Mon Sep 17 00:00:00 2001 From: Regis Houssin Date: Fri, 29 Jun 2012 09:30:24 +0200 Subject: [PATCH 3/3] New: remove linked elements invalid --- htdocs/install/lib/repair.lib.php | 108 ++++++++++++++++++++++++++++++ htdocs/install/repair.php | 29 +++++++- htdocs/langs/fr_FR/install.lang | 5 +- 3 files changed, 138 insertions(+), 4 deletions(-) create mode 100644 htdocs/install/lib/repair.lib.php diff --git a/htdocs/install/lib/repair.lib.php b/htdocs/install/lib/repair.lib.php new file mode 100644 index 00000000000..d71dd5d7380 --- /dev/null +++ b/htdocs/install/lib/repair.lib.php @@ -0,0 +1,108 @@ + + * + * 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, see . + * or see http://www.gnu.org/ + */ + +/** + * \file htdocs/install/lib/repair.lib.php + * \brief Library of repair functions + */ + +/** + * Check if an element exist + * + * @param int $id Element id + * @param string $table Table of Element + */ +function checkElementExist($id, $table) +{ + global $db; + + $sql = 'SELECT rowid FROM ' . MAIN_DB_PREFIX . $table; + $sql.= ' WHERE rowid = '.$id; + $resql=$db->query($sql); + if ($resql) + { + $num = $db->num_rows($resql); + if ($num > 0) return true; + else return false; + } +} + +/** + * Check linked elements and delete if invalid + * + * @param string $sourcetype Source element type + * @param string $targettype Target element type + * @return string + */ +function checkLinkedElements($sourcetype, $targettype) +{ + global $db, $langs; + + $elements=array(); + $deleted=0; + + if ($sourcetype == 'shipping') $sourcetable = 'expedition'; + else if ($targettype == 'shipping') $targettable = 'expedition'; + if ($sourcetype == 'delivery') $sourcetable = 'livraison'; + else if ($targettype == 'delivery') $targettable = 'livraison'; + if ($sourcetype == 'order_supplier') $sourcetable = 'commande_fournisseur'; + else if ($targettype == 'order_supplier') $targettable = 'commande_fournisseur'; + if ($sourcetype == 'invoice_supplier') $sourcetable = 'facture_fourn'; + else if ($targettype == 'invoice_supplier') $targettable = 'facture_fourn'; + + $out = $langs->trans('SourceType').': '.$sourcetype.' => '.$langs->trans('TargetType').': '.$targettype.' '; + + $sql = 'SELECT * FROM '.MAIN_DB_PREFIX .'element_element'; + $sql.= ' WHERE sourcetype="'.$sourcetype.'" AND targettype="'.$targettype.'"'; + $resql=$db->query($sql); + if ($resql) + { + $num = $db->num_rows($resql); + if ($num) + { + $i = 0; + while ($i < $num) + { + $obj = $db->fetch_object($resql); + $elements[$obj->rowid]=array($sourcetype => $obj->fk_source, $targettype => $obj->fk_target); + $i++; + } + } + } + + if (! empty($elements)) + { + foreach($elements as $key => $element) + { + if (! checkElementExist($element[$sourcetype], $sourcetable) || ! checkElementExist($element[$targettype], $targettable)) + { + $sql = 'DELETE FROM '.MAIN_DB_PREFIX .'element_element'; + $sql.= ' WHERE rowid = '.$key; + $resql=$db->query($sql); + $deleted++; + } + } + } + + if ($deleted) $out.= '('.$langs->trans('LinkedElementsInvalidDeleted', $deleted).')
'; + else $out.= '('.$langs->trans('NothingToDelete').')
'; + + return $out; +} + +?> diff --git a/htdocs/install/repair.php b/htdocs/install/repair.php index 7179f94efc1..6c50888399f 100644 --- a/htdocs/install/repair.php +++ b/htdocs/install/repair.php @@ -1,7 +1,7 @@ - * Copyright (C) 2004-2009 Laurent Destailleur - * Copyright (C) 2005-2009 Regis Houssin + * Copyright (C) 2004-2012 Laurent Destailleur + * Copyright (C) 2005-2012 Regis Houssin * * 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 @@ -26,7 +26,7 @@ include_once("./inc.php"); if (file_exists($conffile)) include_once($conffile); require_once($dolibarr_main_document_root."/core/lib/admin.lib.php"); require_once($dolibarr_main_document_root."/core/class/extrafields.class.php"); - +require_once("lib/repair.lib.php"); $grant_query=''; $etape = 2; @@ -262,6 +262,29 @@ foreach($listofmodulesextra as $tablename => $elementtype) } +// Check and clean linked elements +if (GETPOST('clean_linked_elements')) +{ + // propal => order + print "".checkLinkedElements('propal', 'commande')."\n"; + + // propal => invoice + print "".checkLinkedElements('propal', 'facture')."\n"; + + // order => invoice + print "".checkLinkedElements('commande', 'facture')."\n"; + + // order => shipping + print "".checkLinkedElements('commande', 'shipping')."\n"; + + // shipping => delivery + print "".checkLinkedElements('shipping', 'delivery')."\n"; + + // order_supplier => invoice_supplier + print "".checkLinkedElements('order_supplier', 'invoice_supplier')."\n"; +} + + // Run purge of directory if (GETPOST('purge')) { diff --git a/htdocs/langs/fr_FR/install.lang b/htdocs/langs/fr_FR/install.lang index 74e18ff8822..83553a53b5b 100644 --- a/htdocs/langs/fr_FR/install.lang +++ b/htdocs/langs/fr_FR/install.lang @@ -155,7 +155,10 @@ MigrationShippingDelivery2=Mise à jour stockage des expéditions 2 MigrationFinished=Migration terminée LastStepDesc=Dernière étape: Définissez ici le compte et mot de passe du premier utilisateur que vous allez utiliser pour vous connecter à l'application. Ne perdez pas ces identifiants, il s'agit du compte permettant d'administrer les autres. ActivateModule=Activation du module %s - +LinkedElementsInvalidDeleted=%s liaisons invalides ont été supprimées +NothingToDelete=Aucune liaison invalide trouvée +SourceType=Source +TargetType=Cible ######### # upgrade