diff --git a/htdocs/admin/dict.php b/htdocs/admin/dict.php
index 56c1434feac03a3432c5607b2cce522d40828d71..5dcc2332015e9ef945e0476fdda5312b8c31cd43 100644
--- a/htdocs/admin/dict.php
+++ b/htdocs/admin/dict.php
@@ -8,6 +8,7 @@
  * Copyright (C) 2011      Remy Younes          <ryounes@gmail.com>
  * Copyright (C) 2012      Marcos García        <marcosgdf@gmail.com>
  * Copyright (C) 2012      Christophe Battarel	<christophe.battarel@ltairis.fr>
+ * Copyright (C) 2011-2012 Alexandre Spangaro	  <alexandre.spangaro@gmail.com>
  *
  * 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
@@ -136,7 +137,7 @@ $tabsql[6] = "SELECT a.id    as rowid, a.code as code, a.libelle AS libelle, a.t
 $tabsql[7] = "SELECT a.id    as rowid, a.code as code, a.libelle AS libelle, a.deductible, p.code as pays_code, p.libelle as pays, a.fk_pays as pays_id, a.active FROM ".MAIN_DB_PREFIX."c_chargesociales AS a, ".MAIN_DB_PREFIX."c_pays as p WHERE a.fk_pays=p.rowid and p.active=1";
 $tabsql[8] = "SELECT id      as rowid, code, libelle, active FROM ".MAIN_DB_PREFIX."c_typent";
 $tabsql[9] = "SELECT code_iso as code, label as libelle, unicode, active FROM ".MAIN_DB_PREFIX."c_currencies";
-$tabsql[10]= "SELECT t.rowid, t.taux, t.localtax1_type, t.localtax1, t.localtax2_type, t.localtax2, p.libelle as pays, p.code as pays_code, t.fk_pays as pays_id, t.recuperableonly, t.note, t.active, t.accountancy_code FROM ".MAIN_DB_PREFIX."c_tva as t, llx_c_pays as p WHERE t.fk_pays=p.rowid";
+$tabsql[10]= "SELECT t.rowid, t.taux, t.localtax1_type, t.localtax1, t.localtax2_type, t.localtax2, p.libelle as pays, p.code as pays_code, t.fk_pays as pays_id, t.recuperableonly, t.note, t.active, t.accountancy_code_sell, t.accountancy_code_buy FROM ".MAIN_DB_PREFIX."c_tva as t, llx_c_pays as p WHERE t.fk_pays=p.rowid";
 $tabsql[11]= "SELECT t.rowid as rowid, element, source, code, libelle, active FROM ".MAIN_DB_PREFIX."c_type_contact AS t";
 $tabsql[12]= "SELECT c.rowid as rowid, code, sortorder, c.libelle, c.libelle_facture, nbjour, fdm, decalage, active FROM ".MAIN_DB_PREFIX.'c_payment_term AS c';
 $tabsql[13]= "SELECT id      as rowid, code, c.libelle, type, active FROM ".MAIN_DB_PREFIX."c_paiement AS c";
@@ -188,7 +189,7 @@ $tabfield[6] = "code,libelle,type,position";
 $tabfield[7] = "code,libelle,pays_id,pays,deductible";
 $tabfield[8] = "code,libelle";
 $tabfield[9] = "code,libelle,unicode";
-$tabfield[10]= "pays_id,pays,taux,recuperableonly,localtax1_type,localtax1,localtax2_type,localtax2,accountancy_code,note";
+$tabfield[10]= "pays_id,pays,taux,recuperableonly,localtax1_type,localtax1,localtax2_type,localtax2,accountancy_code_sell,accountancy_code_buy,note";
 $tabfield[11]= "element,source,code,libelle";
 $tabfield[12]= "code,libelle,libelle_facture,nbjour,fdm,decalage";
 $tabfield[13]= "code,libelle,type";
@@ -214,7 +215,7 @@ $tabfieldvalue[6] = "code,libelle,type,position";
 $tabfieldvalue[7] = "code,libelle,pays,deductible";
 $tabfieldvalue[8] = "code,libelle";
 $tabfieldvalue[9] = "code,libelle,unicode";
-$tabfieldvalue[10]= "pays,taux,recuperableonly,localtax1_type,localtax1,localtax2_type,localtax2,accountancy_code,note";
+$tabfieldvalue[10]= "pays,taux,recuperableonly,localtax1_type,localtax1,localtax2_type,localtax2,accountancy_code_sell,accountancy_code_buy,note";
 $tabfieldvalue[11]= "element,source,code,libelle";
 $tabfieldvalue[12]= "code,libelle,libelle_facture,nbjour,fdm,decalage";
 $tabfieldvalue[13]= "code,libelle,type";
@@ -240,7 +241,7 @@ $tabfieldinsert[6] = "code,libelle,type,position";
 $tabfieldinsert[7] = "code,libelle,fk_pays,deductible";
 $tabfieldinsert[8] = "code,libelle";
 $tabfieldinsert[9] = "code_iso,label,unicode";
-$tabfieldinsert[10]= "fk_pays,taux,recuperableonly,localtax1_type,localtax1,localtax2_type,localtax2,accountancy_code,note";
+$tabfieldinsert[10]= "fk_pays,taux,recuperableonly,localtax1_type,localtax1,localtax2_type,localtax2,accountancy_code_sell,accountancy_code_buy,note";
 $tabfieldinsert[11]= "element,source,code,libelle";
 $tabfieldinsert[12]= "code,libelle,libelle_facture,nbjour,fdm,decalage";
 $tabfieldinsert[13]= "code,libelle,type";
@@ -344,45 +345,45 @@ $elementList = array();
 $sourceList=array();
 if ($id == 11)
 {
-    $langs->load("orders");
-    $langs->load("contracts");
-    $langs->load("projects");
-    $langs->load("propal");
-    $langs->load("bills");
-    $langs->load("interventions");
-    $elementList = array(
-        'commande'          => $langs->trans('Order'),
-        'invoice_supplier'  => $langs->trans('SupplierBill'),
-        'order_supplier'    => $langs->trans('SupplierOrder'),
-        'contrat'           => $langs->trans('Contract'),
-        'project'           => $langs->trans('Project'),
-        'project_task'      => $langs->trans('Task'),
-        'propal'            => $langs->trans('Proposal'),
-        'facture'           => $langs->trans('Bill'),
-        'facture_fourn'     => $langs->trans('SupplierBill'),
-        'fichinter'         => $langs->trans('InterventionCard')
-    );
-    if (! empty($conf->global->MAIN_SUPPORT_CONTACT_TYPE_FOR_THIRDPARTIES)) $elementList["societe"] = $langs->trans('ThirdParty');
-    $sourceList = array(
-        'internal' => $langs->trans('Internal'),
-        'external' => $langs->trans('External')
-    );
+	$langs->load("orders");
+	$langs->load("contracts");
+	$langs->load("projects");
+	$langs->load("propal");
+	$langs->load("bills");
+	$langs->load("interventions");
+	$elementList = array(
+			'commande'          => $langs->trans('Order'),
+			'invoice_supplier'  => $langs->trans('SupplierBill'),
+			'order_supplier'    => $langs->trans('SupplierOrder'),
+			'contrat'           => $langs->trans('Contract'),
+			'project'           => $langs->trans('Project'),
+			'project_task'      => $langs->trans('Task'),
+			'propal'            => $langs->trans('Proposal'),
+			'facture'           => $langs->trans('Bill'),
+			'facture_fourn'     => $langs->trans('SupplierBill'),
+			'fichinter'         => $langs->trans('InterventionCard')
+	);
+	if (! empty($conf->global->MAIN_SUPPORT_CONTACT_TYPE_FOR_THIRDPARTIES)) $elementList["societe"] = $langs->trans('ThirdParty');
+	$sourceList = array(
+			'internal' => $langs->trans('Internal'),
+			'external' => $langs->trans('External')
+	);
 }
 
 // Define localtax_typeList (used for dictionnary "c_tva")
 $localtax_typeList = array();
 if (GETPOST("id") == 10)
 {
-  $localtax_typeList = array(
-  	"0" => $langs->trans("No"),
-    "1" => $langs->trans("Yes").' ('.$langs->trans("Type")." 1)",	//$langs->trans("%ageOnAllWithoutVAT"),
-    "2" => $langs->trans("Yes").' ('.$langs->trans("Type")." 2)",	//$langs->trans("%ageOnAllBeforeVAT"),
-    "3" => $langs->trans("Yes").' ('.$langs->trans("Type")." 3)",	//$langs->trans("%ageOnProductsWithoutVAT"),
-    "4" => $langs->trans("Yes").' ('.$langs->trans("Type")." 4)",	//$langs->trans("%ageOnProductsBeforeVAT"),
-    "5" => $langs->trans("Yes").' ('.$langs->trans("Type")." 5)",	//$langs->trans("%ageOnServiceWithoutVAT"),
-    "6" => $langs->trans("Yes").' ('.$langs->trans("Type")." 6)",	//$langs->trans("%ageOnServiceBeforeVAT"),
-    "7" => $langs->trans("Yes").' ('.$langs->trans("Type")." 7)"	//$langs->trans("AmountOnOrder")	// We will enable this later. For the moment, work only of invoice localtype
-  );
+	$localtax_typeList = array(
+			"0" => $langs->trans("No"),
+			"1" => $langs->trans("Yes").' ('.$langs->trans("Type")." 1)",	//$langs->trans("%ageOnAllWithoutVAT"),
+			"2" => $langs->trans("Yes").' ('.$langs->trans("Type")." 2)",	//$langs->trans("%ageOnAllBeforeVAT"),
+			"3" => $langs->trans("Yes").' ('.$langs->trans("Type")." 3)",	//$langs->trans("%ageOnProductsWithoutVAT"),
+			"4" => $langs->trans("Yes").' ('.$langs->trans("Type")." 4)",	//$langs->trans("%ageOnProductsBeforeVAT"),
+			"5" => $langs->trans("Yes").' ('.$langs->trans("Type")." 5)",	//$langs->trans("%ageOnServiceWithoutVAT"),
+			"6" => $langs->trans("Yes").' ('.$langs->trans("Type")." 6)",	//$langs->trans("%ageOnServiceBeforeVAT"),
+			"7" => $langs->trans("Yes").' ('.$langs->trans("Type")." 7)"	//$langs->trans("AmountOnOrder")	// We will enable this later. For the moment, work only of invoice localtype
+	);
 }
 $msg='';
 
@@ -404,7 +405,7 @@ if (GETPOST('actionadd') || GETPOST('actionmodify'))
         if ($value == 'localtax2' && empty($_POST['localtax2_type'])) continue;
         if ((! isset($_POST[$value]) || $_POST[$value]=='')
         //	&& (! in_array($listfield[$f], array('decalage','module','accountancy_code','localtax1','localtax2')))  // Fields that are not mandatory
-        	&& (! in_array($listfield[$f], array('decalage','module','accountancy_code')))  // Fields that are not mandatory
+        	&& (! in_array($listfield[$f], array('decalage','module','accountancy_code_sell','accountancy_code_buy')))  // Fields that are not mandatory
 		)
         {
             $ok=0;
@@ -464,14 +465,14 @@ if (GETPOST('actionadd') || GETPOST('actionmodify'))
         // Add new entry
         $sql = "INSERT INTO ".$tabname[$id]." (";
         // List of fields
-        if ($tabrowid[$id] &&
-        ! in_array($tabrowid[$id],$listfieldinsert)) $sql.= $tabrowid[$id].",";
+        if ($tabrowid[$id] && ! in_array($tabrowid[$id],$listfieldinsert))
+        	$sql.= $tabrowid[$id].",";
         $sql.= $tabfieldinsert[$id];
         $sql.=",active)";
         $sql.= " VALUES(";
         // List of values
-        if ($tabrowid[$id] &&
-        ! in_array($tabrowid[$id],$listfieldinsert)) $sql.= $newid.",";
+        if ($tabrowid[$id] && ! in_array($tabrowid[$id],$listfieldinsert))
+        	$sql.= $newid.",";
         $i=0;
         foreach ($listfieldinsert as $f => $value)
         {
@@ -516,7 +517,7 @@ if (GETPOST('actionadd') || GETPOST('actionmodify'))
         // Modify entry
         $sql = "UPDATE ".$tabname[$id]." SET ";
         // Modifie valeur des champs
-        if ($tabrowid[$id] && !in_array($tabrowid[$id],$listfieldmodify))
+        if ($tabrowid[$id] && ! in_array($tabrowid[$id],$listfieldmodify))
         {
             $sql.= $tabrowid[$id]."=";
             $sql.= "'".$db->escape($rowid)."', ";
@@ -633,7 +634,7 @@ $linkback='';
 if ($id)
 {
     $titre.=' - '.$langs->trans($tablib[$id]);
-    $linkback='<a href="'.DOL_URL_ROOT.'/admin/dict.php">'.$langs->trans("BackToDictionnaryList").'</a>';
+    $linkback='<a href="'.$_SERVER['PHP_SELF'].'">'.$langs->trans("BackToDictionnaryList").'</a>';
 }
 print_fiche_titre($titre,$linkback,'setup');
 
@@ -685,7 +686,7 @@ if ($id)
 
     $fieldlist=explode(',',$tabfield[$id]);
 
-    print '<form action="'.$_SERVER["PHP_SELF"].'" method="post">';
+    print '<form action="'.$_SERVER['PHP_SELF'].'?id='.$id.'" method="POST">';
     print '<input type="hidden" name="token" value="'.$_SESSION['newtoken'].'">';
     print '<table class="noborder" width="100%">';
 
@@ -710,9 +711,9 @@ if ($id)
             if ($fieldlist[$field]=='price')           { $valuetoshow=$langs->trans("PriceUHT"); }
             if ($fieldlist[$field]=='taux')            { $valuetoshow=$langs->trans("Rate"); }
             if ($fieldlist[$field]=='localtax1_type')  { $valuetoshow=$form->textwithtooltip($langs->trans("UseLocalTax")." 2",$langs->trans("LocalTaxDesc"),2,1,img_help(1,'')); $align="center"; $sortable=0; }
-            if ($fieldlist[$field]=='localtax1')       { $valuetoshow=$langs->trans("Rate")." 2"; $align="right"; }
+            if ($fieldlist[$field]=='localtax1')       { $valuetoshow=$langs->trans("Rate")." 2";}
             if ($fieldlist[$field]=='localtax2_type')  { $valuetoshow=$form->textwithtooltip($langs->trans("UseLocalTax")." 3",$langs->trans("LocalTaxDesc"),2,1,img_help(1,'')); $align="center"; $sortable=0; }
-            if ($fieldlist[$field]=='localtax2')       { $valuetoshow=$langs->trans("Rate")." 3"; $align="right"; }
+            if ($fieldlist[$field]=='localtax2')       { $valuetoshow=$langs->trans("Rate")." 3";}
             if ($fieldlist[$field]=='organization')    { $valuetoshow=$langs->trans("Organization"); }
             if ($fieldlist[$field]=='lang')            { $valuetoshow=$langs->trans("Language"); }
             if ($fieldlist[$field]=='type')            { $valuetoshow=$langs->trans("Type"); }
@@ -731,7 +732,8 @@ if ($id)
             if ($fieldlist[$field]=='height')          { $valuetoshow=$langs->trans("Height"); }
             if ($fieldlist[$field]=='unit')            { $valuetoshow=$langs->trans("MeasuringUnit"); }
             if ($fieldlist[$field]=='region_id' || $fieldlist[$field]=='pays_id') { $valuetoshow=''; }
-            if ($fieldlist[$field]=='accountancy_code'){ $valuetoshow=$langs->trans("AccountancyCode"); }
+            if ($fieldlist[$field]=='accountancy_code_sell'){ $valuetoshow=$langs->trans("AccountancyCodeSell"); }
+            if ($fieldlist[$field]=='accountancy_code_buy'){ $valuetoshow=$langs->trans("AccountancyCodeBuy"); }
             if ($fieldlist[$field]=='fk_pcg_version')  { $valuetoshow=$langs->trans("Pcg_version"); }
             if ($fieldlist[$field]=='account_number')  { $valuetoshow=$langs->trans("Account"); }
             if ($fieldlist[$field]=='account_parent')  { $valuetoshow=$langs->trans("Accountparent"); }
@@ -776,13 +778,14 @@ if ($id)
         print '<td colspan="3" align="right"><input type="submit" class="button" name="actionadd" value="'.$langs->trans("Add").'"></td>';
         print "</tr>";
 
-        if ($alabelisused)  // Si un des champs est un libelle
+        if (! empty($alabelisused))  // Si un des champs est un libelle
         {
             print '<tr><td colspan="'.(count($fieldlist)+2).'">* '.$langs->trans("LabelUsedByDefault").'.</td></tr>';
         }
         print '<tr><td colspan="'.(count($fieldlist)+2).'">&nbsp;</td></tr>';
     }
 
+    print '</form>';
 
     // List of available values in database
     dol_syslog("htdocs/admin/dict sql=".$sql, LOG_DEBUG);
@@ -825,9 +828,9 @@ if ($id)
                 if ($fieldlist[$field]=='price')           { $valuetoshow=$langs->trans("PriceUHT"); }
                 if ($fieldlist[$field]=='taux')            { $valuetoshow=$langs->trans("Rate"); }
                 if ($fieldlist[$field]=='localtax1_type')  { $valuetoshow=$form->textwithtooltip($langs->trans("UseLocalTax")." 2",$langs->trans("LocalTaxDesc"),2,1,img_help(1,'')); $align="center"; $sortable=0; }
-                if ($fieldlist[$field]=='localtax1')       { $valuetoshow=$langs->trans("Rate")." 2"; $align="right"; $sortable=0; }
+                if ($fieldlist[$field]=='localtax1')       { $valuetoshow=$langs->trans("Rate")." 2"; $sortable=0; }
                 if ($fieldlist[$field]=='localtax2_type')  { $valuetoshow=$form->textwithtooltip($langs->trans("UseLocalTax")." 3",$langs->trans("LocalTaxDesc"),2,1,img_help(1,'')); $align="center"; $sortable=0; }
-                if ($fieldlist[$field]=='localtax2')       { $valuetoshow=$langs->trans("Rate")." 3"; $align="right"; $sortable=0; }
+                if ($fieldlist[$field]=='localtax2')       { $valuetoshow=$langs->trans("Rate")." 3"; $sortable=0; }
                 if ($fieldlist[$field]=='organization')    { $valuetoshow=$langs->trans("Organization"); }
                 if ($fieldlist[$field]=='lang')            { $valuetoshow=$langs->trans("Language"); }
                 if ($fieldlist[$field]=='type')            { $valuetoshow=$langs->trans("Type"); }
@@ -843,7 +846,8 @@ if ($id)
                 if ($fieldlist[$field]=='height')          { $valuetoshow=$langs->trans("Height"); }
                 if ($fieldlist[$field]=='unit')            { $valuetoshow=$langs->trans("MeasuringUnit"); }
                 if ($fieldlist[$field]=='region_id' || $fieldlist[$field]=='pays_id') { $showfield=0; }
-                if ($fieldlist[$field]=='accountancy_code'){ $valuetoshow=$langs->trans("AccountancyCode"); }
+                if ($fieldlist[$field]=='accountancy_code_sell'){ $valuetoshow=$langs->trans("AccountancyCodeSell"); $sortable=0; }
+                if ($fieldlist[$field]=='accountancy_code_buy'){ $valuetoshow=$langs->trans("AccountancyCodeBuy"); $sortable=0; }
 				if ($fieldlist[$field]=='fk_pcg_version')  { $valuetoshow=$langs->trans("Pcg_version"); }
                 if ($fieldlist[$field]=='account_number')  { $valuetoshow=$langs->trans("Accounts"); }
                 if ($fieldlist[$field]=='account_parent')  { $valuetoshow=$langs->trans("Accountsparent"); }
@@ -869,9 +873,8 @@ if ($id)
                 print '<tr '.$bc[$var].' id="rowid-'.$obj->rowid.'">';
                 if ($action == 'edit' && ($rowid == (! empty($obj->rowid)?$obj->rowid:$obj->code)))
                 {
-                    print '<form action="dict.php" method="post">';
+                    print '<form action="'.$_SERVER['PHP_SELF'].'?id='.$id.'" method="POST">';
                     print '<input type="hidden" name="token" value="'.$_SESSION['newtoken'].'">';
-                    print '<input type="hidden" name="id" value="'.$id.'">';
                     print '<input type="hidden" name="page" value="'.$page.'">';
                     print '<input type="hidden" name="rowid" value="'.$rowid.'">';
 
@@ -886,7 +889,7 @@ if ($id)
                     print '&nbsp;<input type="submit" class="button" name="actioncancel" value="'.$langs->trans("Cancel").'"></td>';
                 }
                 else
-              {
+                {
 	              	$tmpaction = 'view';
                     $parameters=array('var'=>$var, 'fieldlist'=>$fieldlist, 'tabname'=>$tabname[$id]);
                     $reshook=$hookmanager->executeHooks('viewDictionaryFieldlist',$parameters,$obj, $tmpaction);    // Note that $action and $object may have been modified by some hooks
@@ -919,7 +922,7 @@ if ($id)
                                 else
                                 {
                                     $key=$langs->trans("Country".strtoupper($obj->pays_code));
-                                    $valuetoshow=($key != "Country".strtoupper($obj->pays_code))?$obj->pays_code." - ".$key:$obj->pays;
+                                    $valuetoshow=($key != "Country".strtoupper($obj->pays_code)?$obj->pays_code." - ".$key:$obj->pays);
                                 }
                             }
                             else if ($fieldlist[$field]=='recuperableonly' || $fieldlist[$field]=='fdm' || $fieldlist[$field] == 'deductible') {
@@ -932,55 +935,55 @@ if ($id)
                             else if ($fieldlist[$field]=='libelle_facture') {
                                 $langs->load("bills");
                                 $key=$langs->trans("PaymentCondition".strtoupper($obj->code));
-                                $valuetoshow=($obj->code && $key != "PaymentCondition".strtoupper($obj->code))?$key:$obj->$fieldlist[$field];
+                                $valuetoshow=($obj->code && $key != "PaymentCondition".strtoupper($obj->code)?$key:$obj->$fieldlist[$field]);
                                 $valuetoshow=nl2br($valuetoshow);
                             }
                             else if ($fieldlist[$field]=='libelle' && $tabname[$_GET["id"]]==MAIN_DB_PREFIX.'c_pays') {
                                 $key=$langs->trans("Country".strtoupper($obj->code));
-                                $valuetoshow=($obj->code && $key != "Country".strtoupper($obj->code))?$key:$obj->$fieldlist[$field];
+                                $valuetoshow=($obj->code && $key != "Country".strtoupper($obj->code)?$key:$obj->$fieldlist[$field]);
                             }
                             else if ($fieldlist[$field]=='label' && $tabname[$_GET["id"]]==MAIN_DB_PREFIX.'c_availability') {
                                 $langs->load("propal");
                                 $key=$langs->trans("AvailabilityType".strtoupper($obj->code));
-                                $valuetoshow=($obj->code && $key != "AvailabilityType".strtoupper($obj->code))?$key:$obj->$fieldlist[$field];
+                                $valuetoshow=($obj->code && $key != "AvailabilityType".strtoupper($obj->code)?$key:$obj->$fieldlist[$field]);
                             }
                             else if ($fieldlist[$field]=='libelle' && $tabname[$_GET["id"]]==MAIN_DB_PREFIX.'c_actioncomm') {
                                 $key=$langs->trans("Action".strtoupper($obj->code));
-                                $valuetoshow=($obj->code && $key != "Action".strtoupper($obj->code))?$key:$obj->$fieldlist[$field];
+                                $valuetoshow=($obj->code && $key != "Action".strtoupper($obj->code)?$key:$obj->$fieldlist[$field]);
                             }
                             else if (! empty($obj->code_iso) && $fieldlist[$field]=='libelle' && $tabname[$_GET["id"]]==MAIN_DB_PREFIX.'c_currencies') {
                                 $key=$langs->trans("Currency".strtoupper($obj->code_iso));
-                                $valuetoshow=($obj->code_iso && $key != "Currency".strtoupper($obj->code_iso))?$key:$obj->$fieldlist[$field];
+                                $valuetoshow=($obj->code_iso && $key != "Currency".strtoupper($obj->code_iso)?$key:$obj->$fieldlist[$field]);
                             }
                             else if ($fieldlist[$field]=='libelle' && $tabname[$_GET["id"]]==MAIN_DB_PREFIX.'c_typent') {
                                 $key=$langs->trans(strtoupper($obj->code));
-                                $valuetoshow=($key != strtoupper($obj->code))?$key:$obj->$fieldlist[$field];
+                                $valuetoshow=($key != strtoupper($obj->code)?$key:$obj->$fieldlist[$field]);
                             }
                             else if ($fieldlist[$field]=='libelle' && $tabname[$_GET["id"]]==MAIN_DB_PREFIX.'c_prospectlevel') {
                                 $key=$langs->trans(strtoupper($obj->code));
-                                $valuetoshow=($key != strtoupper($obj->code))?$key:$obj->$fieldlist[$field];
+                                $valuetoshow=($key != strtoupper($obj->code)?$key:$obj->$fieldlist[$field]);
                             }
                             else if ($fieldlist[$field]=='libelle' && $tabname[$_GET["id"]]==MAIN_DB_PREFIX.'c_civilite') {
                                 $key=$langs->trans("Civility".strtoupper($obj->code));
-                                $valuetoshow=($obj->code && $key != "Civility".strtoupper($obj->code))?$key:$obj->$fieldlist[$field];
+                                $valuetoshow=($obj->code && $key != "Civility".strtoupper($obj->code)?$key:$obj->$fieldlist[$field]);
                             }
                             else if ($fieldlist[$field]=='libelle' && $tabname[$_GET["id"]]==MAIN_DB_PREFIX.'c_type_contact') {
                                 $key=$langs->trans("TypeContact_".$obj->element."_".$obj->source."_".strtoupper($obj->code));
-                                $valuetoshow=($obj->code && $key != "TypeContact_".$obj->element."_".$obj->source."_".strtoupper($obj->code))?$key:$obj->$fieldlist[$field];
+                                $valuetoshow=($obj->code && $key != "TypeContact_".$obj->element."_".$obj->source."_".strtoupper($obj->code)?$key:$obj->$fieldlist[$field]);
                             }
                             else if ($fieldlist[$field]=='libelle' && $tabname[$_GET["id"]]==MAIN_DB_PREFIX.'c_payment_term') {
                                 $langs->load("bills");
                                 $key=$langs->trans("PaymentConditionShort".strtoupper($obj->code));
-                                $valuetoshow=($obj->code && $key != "PaymentConditionShort".strtoupper($obj->code))?$key:$obj->$fieldlist[$field];
+                                $valuetoshow=($obj->code && $key != "PaymentConditionShort".strtoupper($obj->code)?$key:$obj->$fieldlist[$field]);
                             }
                             else if ($fieldlist[$field]=='libelle' && $tabname[$_GET["id"]]==MAIN_DB_PREFIX.'c_paiement') {
                                 $langs->load("bills");
                                 $key=$langs->trans("PaymentType".strtoupper($obj->code));
-                                $valuetoshow=($obj->code && $key != "PaymentType".strtoupper($obj->code))?$key:$obj->$fieldlist[$field];
+                                $valuetoshow=($obj->code && $key != "PaymentType".strtoupper($obj->code)?$key:$obj->$fieldlist[$field]);
                             }
                             else if ($fieldlist[$field]=='label' && $tabname[$_GET["id"]]==MAIN_DB_PREFIX.'c_input_reason') {
                                 $key=$langs->trans("DemandReasonType".strtoupper($obj->code));
-                                $valuetoshow=($obj->code && $key != "DemandReasonType".strtoupper($obj->code))?$key:$obj->$fieldlist[$field];
+                                $valuetoshow=($obj->code && $key != "DemandReasonType".strtoupper($obj->code)?$key:$obj->$fieldlist[$field]);
                             }
                             else if ($fieldlist[$field]=='libelle' && $tabname[$_GET["id"]]==MAIN_DB_PREFIX.'c_input_method') {
                                 $langs->load("orders");
@@ -990,18 +993,18 @@ if ($id)
                             else if ($fieldlist[$field]=='libelle' && $tabname[$_GET["id"]]==MAIN_DB_PREFIX.'c_shipment_mode') {
                                 $langs->load("sendings");
                                 $key=$langs->trans("SendingMethod".strtoupper($obj->code));
-                                $valuetoshow=($obj->code && $key != "SendingMethod".strtoupper($obj->code))?$key:$obj->$fieldlist[$field];
+                                $valuetoshow=($obj->code && $key != "SendingMethod".strtoupper($obj->code)?$key:$obj->$fieldlist[$field]);
                             }
                             else if ($fieldlist[$field] == 'libelle' && $tabname[$_GET['id']]==MAIN_DB_PREFIX.'c_paper_format')
                             {
                                 $key = $langs->trans('PaperFormat'.strtoupper($obj->code));
-                                $valuetoshow = ($obj->code && ($key != 'PaperFormat'.strtoupper($obj->code))) ? $key : $obj->$fieldlist[$field];
+                                $valuetoshow = ($obj->code && $key != 'PaperFormat'.strtoupper($obj->code) ? $key : $obj->$fieldlist[$field]);
                             }
                             else if ($fieldlist[$field] == 'libelle' && $tabname[$_GET['id']] == MAIN_DB_PREFIX.'c_type_fees')
                             {
                                 $langs->load('trips');
                                 $key = $langs->trans(strtoupper($obj->code));
-                                $valuetoshow = ($obj->code && ($key != strtoupper($obj->code))) ? $key : $obj->$fieldlist[$field];
+                                $valuetoshow = ($obj->code && $key != strtoupper($obj->code) ? $key : $obj->$fieldlist[$field]);
                             }
                             else if ($fieldlist[$field]=='region_id' || $fieldlist[$field]=='pays_id') {
                                 $showfield=0;
@@ -1013,7 +1016,7 @@ if ($id)
                             else if (($fieldlist[$field] == 'unit') && ($tabname[$_GET['id']] == MAIN_DB_PREFIX.'c_paper_format'))
                             {
                             	$key = $langs->trans('SizeUnit'.strtolower($obj->unit));
-                                $valuetoshow = ($obj->code && ($key != 'SizeUnit'.strtolower($obj->unit))) ? $key : $obj->$fieldlist[$field];
+                                $valuetoshow = ($obj->code && $key != 'SizeUnit'.strtolower($obj->unit) ? $key : $obj->$fieldlist[$field]);
                             }
 
 							else if ($fieldlist[$field]=='localtax1_type') {
@@ -1167,108 +1170,110 @@ $db->close();
  */
 function fieldList($fieldlist,$obj='',$tabname='')
 {
-    global $conf,$langs,$db;
-    global $form;
-    global $region_id;
-    global $elementList,$sourceList,$localtax_typeList;
-
-    $formadmin = new FormAdmin($db);
-    $formcompany = new FormCompany($db);
-
-    foreach ($fieldlist as $field => $value)
-    {
-    	if ($fieldlist[$field] == 'pays') {
-    		if (in_array('region_id',$fieldlist)) { print '<td>&nbsp;</td>'; continue; }	// For region page, we do not show the country input
-            print '<td>';
-            print $form->select_country((! empty($obj->pays_code)?$obj->pays_code:(! empty($obj->pays)?$obj->pays:'')),'pays');
-            print '</td>';
-        }
-        elseif ($fieldlist[$field] == 'pays_id') {
-            $pays_id = (! empty($obj->$fieldlist[$field])) ? $obj->$fieldlist[$field] : 0;
-            print '<input type="hidden" name="'.$fieldlist[$field].'" value="'.$pays_id.'">';
-        }
-        elseif ($fieldlist[$field] == 'region') {
-            print '<td>';
-            $formcompany->select_region($region_id,'region');
-            print '</td>';
-        }
-        elseif ($fieldlist[$field] == 'region_id') {
-            $region_id = (! empty($obj->$fieldlist[$field])?$obj->$fieldlist[$field]:0);
-            print '<input type="hidden" name="'.$fieldlist[$field].'" value="'.$region_id.'">';
-        }
-        elseif ($fieldlist[$field] == 'lang') {
-            print '<td>';
-            print $formadmin->select_language($conf->global->MAIN_LANG_DEFAULT,'lang');
-            print '</td>';
-        }
-        // Le type de l'element (pour les type de contact).'
-        elseif ($fieldlist[$field] == 'element')
-        {
-            print '<td>';
-            print $form->selectarray('element', $elementList,(! empty($obj->$fieldlist[$field])?$obj->$fieldlist[$field]:''));
-            print '</td>';
-        }
-        // La source de l'element (pour les type de contact).'
-        elseif ($fieldlist[$field] == 'source')
-        {
-            print '<td>';
-            print $form->selectarray('source', $sourceList,(! empty($obj->$fieldlist[$field])?$obj->$fieldlist[$field]:''));
-            print '</td>';
-        }
-        elseif ($fieldlist[$field] == 'type' && $tabname == MAIN_DB_PREFIX."c_actioncomm")
-        {
-            print '<td>';
-            print 'user<input type="hidden" name="type" value="user">';
-            print '</td>';
-        }
-        elseif ($fieldlist[$field] == 'recuperableonly' || $fieldlist[$field] == 'fdm' || $fieldlist[$field] == 'deductible') {
-            print '<td>';
-            print $form->selectyesno($fieldlist[$field],(! empty($obj->$fieldlist[$field])?$obj->$fieldlist[$field]:''),1);
-            print '</td>';
-        }
-        elseif (in_array($fieldlist[$field],array('nbjour','decalage','taux','localtax1','localtax2'))) {
-            $align="left";
-            if (in_array($fieldlist[$field],array('taux','localtax1','localtax2'))) $align="right";	// Fields aligned on right
-            print '<td align="'.$align.'">';
-            print '<input type="text" class="flat" value="'.(! empty($obj->$fieldlist[$field])?$obj->$fieldlist[$field]:'').'" size="3" name="'.$fieldlist[$field].'">';
-            print '</td>';
-        }
-        elseif ($fieldlist[$field] == 'libelle_facture') {
-            print '<td><textarea cols="30" rows="'.ROWS_2.'" class="flat" name="'.$fieldlist[$field].'">'.(! empty($obj->$fieldlist[$field])?$obj->$fieldlist[$field]:'').'</textarea></td>';
-        }
-        elseif ($fieldlist[$field] == 'price' || preg_match('/^amount/i',$fieldlist[$field])) {
-            print '<td><input type="text" class="flat" value="'.price((! empty($obj->$fieldlist[$field])?$obj->$fieldlist[$field]:'')).'" size="8" name="'.$fieldlist[$field].'"></td>';
-        }
-        elseif ($fieldlist[$field] == 'code' && isset($obj->$fieldlist[$field])) {
-            print '<td><input type="text" class="flat" value="'.(! empty($obj->$fieldlist[$field])?$obj->$fieldlist[$field]:'').'" size="10" name="'.$fieldlist[$field].'"></td>';
-        }
-        elseif ($fieldlist[$field]=='unit') {
-            print '<td>';
-            print $form->selectarray('unit', array(
-            	'mm' => $langs->trans('SizeUnitmm'),
-            	'cm' => $langs->trans('SizeUnitcm'),
-            	'point' => $langs->trans('SizeUnitpoint'),
-            	'inch' => $langs->trans('SizeUnitinch')
-            ), (! empty($obj->$fieldlist[$field])?$obj->$fieldlist[$field]:''), 0, 0, 0);
-            print '</td>';
-        }
-        // Le type de taxe locale
-        elseif ($fieldlist[$field] == 'localtax1_type' || $fieldlist[$field] == 'localtax2_type')
-        {
-            print '<td align="center">';
-            print $form->selectarray($fieldlist[$field], $localtax_typeList,$obj->$fieldlist[$field]);
-            print '</td>';
-        }
-        else
-        {
-            print '<td>';
-            $size='';
-            if ($fieldlist[$field]=='libelle') $size='size="32" ';
-            if ($fieldlist[$field]=='accountancy_code') $size='size="9" ';
-            print '<input type="text" '.$size.' class="flat" value="'.(isset($obj->$fieldlist[$field])?$obj->$fieldlist[$field]:'').'" name="'.$fieldlist[$field].'">';
-            print '</td>';
-        }
-    }
+	global $conf,$langs,$db;
+	global $form;
+	global $region_id;
+	global $elementList,$sourceList,$localtax_typeList;
+
+	$formadmin = new FormAdmin($db);
+	$formcompany = new FormCompany($db);
+
+	foreach ($fieldlist as $field => $value)
+	{
+		if ($fieldlist[$field] == 'pays') {
+			if (in_array('region_id',$fieldlist)) { print '<td>&nbsp;</td>'; continue; }	// For region page, we do not show the country input
+			print '<td>';
+			print $form->select_country((! empty($obj->pays_code)?$obj->pays_code:(! empty($obj->pays)?$obj->pays:'')),'pays');
+			print '</td>';
+		}
+		elseif ($fieldlist[$field] == 'pays_id') {
+			$pays_id = (! empty($obj->$fieldlist[$field]) ? $obj->$fieldlist[$field] : 0);
+			print '<input type="hidden" name="'.$fieldlist[$field].'" value="'.$pays_id.'">';
+		}
+		elseif ($fieldlist[$field] == 'region') {
+			print '<td>';
+			$formcompany->select_region($region_id,'region');
+			print '</td>';
+		}
+		elseif ($fieldlist[$field] == 'region_id') {
+			$region_id = (! empty($obj->$fieldlist[$field])?$obj->$fieldlist[$field]:0);
+			print '<input type="hidden" name="'.$fieldlist[$field].'" value="'.$region_id.'">';
+		}
+		elseif ($fieldlist[$field] == 'lang') {
+			print '<td>';
+			print $formadmin->select_language($conf->global->MAIN_LANG_DEFAULT,'lang');
+			print '</td>';
+		}
+		// Le type de l'element (pour les type de contact)
+		elseif ($fieldlist[$field] == 'element')
+		{
+			print '<td>';
+			print $form->selectarray('element', $elementList,(! empty($obj->$fieldlist[$field])?$obj->$fieldlist[$field]:''));
+			print '</td>';
+		}
+		// La source de l'element (pour les type de contact)
+		elseif ($fieldlist[$field] == 'source')
+		{
+			print '<td>';
+			print $form->selectarray('source', $sourceList,(! empty($obj->$fieldlist[$field])?$obj->$fieldlist[$field]:''));
+			print '</td>';
+		}
+		elseif ($fieldlist[$field] == 'type' && $tabname == MAIN_DB_PREFIX."c_actioncomm")
+		{
+			print '<td>';
+			print 'user<input type="hidden" name="type" value="user">';
+			print '</td>';
+		}
+		elseif ($fieldlist[$field] == 'recuperableonly' || $fieldlist[$field] == 'fdm' || $fieldlist[$field] == 'deductible') {
+			print '<td>';
+			print $form->selectyesno($fieldlist[$field],(! empty($obj->$fieldlist[$field])?$obj->$fieldlist[$field]:''),1);
+			print '</td>';
+		}
+		elseif (in_array($fieldlist[$field],array('nbjour','decalage','taux','localtax1','localtax2'))) {
+			$align="left";
+			if (in_array($fieldlist[$field],array('taux','localtax1','localtax2'))) $align="right";	// Fields aligned on right
+			print '<td align="'.$align.'">';
+			print '<input type="text" class="flat" value="'.(! empty($obj->$fieldlist[$field])?$obj->$fieldlist[$field]:'').'" size="3" name="'.$fieldlist[$field].'">';
+			print '</td>';
+		}
+		elseif ($fieldlist[$field] == 'libelle_facture') {
+			print '<td><textarea cols="30" rows="'.ROWS_2.'" class="flat" name="'.$fieldlist[$field].'">'.(! empty($obj->$fieldlist[$field])?$obj->$fieldlist[$field]:'').'</textarea></td>';
+		}
+		elseif ($fieldlist[$field] == 'price' || preg_match('/^amount/i',$fieldlist[$field])) {
+			print '<td><input type="text" class="flat" value="'.price((! empty($obj->$fieldlist[$field])?$obj->$fieldlist[$field]:'')).'" size="8" name="'.$fieldlist[$field].'"></td>';
+		}
+		elseif ($fieldlist[$field] == 'code' && isset($obj->$fieldlist[$field])) {
+			print '<td><input type="text" class="flat" value="'.(! empty($obj->$fieldlist[$field])?$obj->$fieldlist[$field]:'').'" size="10" name="'.$fieldlist[$field].'"></td>';
+		}
+		elseif ($fieldlist[$field]=='unit') {
+			print '<td>';
+			$units = array(
+					'mm' => $langs->trans('SizeUnitmm'),
+					'cm' => $langs->trans('SizeUnitcm'),
+					'point' => $langs->trans('SizeUnitpoint'),
+					'inch' => $langs->trans('SizeUnitinch')
+			);
+			print $form->selectarray('unit', $units, (! empty($obj->$fieldlist[$field])?$obj->$fieldlist[$field]:''), 0, 0, 0);
+			print '</td>';
+		}
+		// Le type de taxe locale
+		elseif ($fieldlist[$field] == 'localtax1_type' || $fieldlist[$field] == 'localtax2_type')
+		{
+			print '<td align="center">';
+			print $form->selectarray($fieldlist[$field], $localtax_typeList,$obj->$fieldlist[$field]);
+			print '</td>';
+		}
+		else
+		{
+			print '<td>';
+			$size='';
+			if ($fieldlist[$field]=='libelle') $size='size="32" ';
+			if ($fieldlist[$field]=='accountancy_code_sell') $size='size="15" ';
+			if ($fieldlist[$field]=='accountancy_code_buy') $size='size="15" ';
+			print '<input type="text" '.$size.' class="flat" value="'.(isset($obj->$fieldlist[$field])?$obj->$fieldlist[$field]:'').'" name="'.$fieldlist[$field].'">';
+			print '</td>';
+		}
+	}
 }
 
 ?>
\ No newline at end of file
diff --git a/htdocs/commande/liste.php b/htdocs/commande/liste.php
index 641d13f864383adab644229068ab2bd6050d6191..b3ea2328866718786510ad292e4628f8b4046291 100644
--- a/htdocs/commande/liste.php
+++ b/htdocs/commande/liste.php
@@ -319,6 +319,8 @@ if ($resql)
 		$companystatic->client=$objp->client;
 		print '<td>';
 		print $companystatic->getNomUrl(1,'customer');
+		print '&nbsp;<a href="'.DOL_URL_ROOT.'/commande/orderstoinvoice.php?socid='.$companystatic->id.'">';
+		print img_picto($langs->trans("CreateInvoiceForThisCustomer").' : '.$companystatic->nom,'object_bill').'</a>';
 		print '</td>';
 
 		print '<td>'.$objp->ref_client.'</td>';
diff --git a/htdocs/commande/orderstoinvoice.php b/htdocs/commande/orderstoinvoice.php
index bffc4530fff8e12d5c64a612f23762a33490edf6..60ce5d3b11b6453de7f723eb5404792bd74e8a81 100755
--- a/htdocs/commande/orderstoinvoice.php
+++ b/htdocs/commande/orderstoinvoice.php
@@ -129,6 +129,7 @@ if (($action == 'create' || $action == 'add') && empty($mesgs))
 	$lineid			= GETPOST('lineid','int');
 	$userid			= GETPOST('userid','int');
 	$search_ref		= GETPOST('sf_ref')?GETPOST('sf_ref'):GETPOST('search_ref');
+	$closeOrders	= GETPOST('autocloseorders') != '' ? true : false;
 
 	// Security check
 	$fieldid = GETPOST('ref','alpha')?'facnumber':'rowid';
@@ -215,8 +216,10 @@ if (($action == 'create' || $action == 'add') && empty($mesgs))
 							$result=$srcobject->fetch($orders_id[$ii]);
 							if ($result > 0)
 							{
-								$srcobject->classer_facturee();
-								$srcobject->setStatut(3);
+								if($closeOrders) {
+									$srcobject->classer_facturee();
+									$srcobject->setStatut(3);
+								}
 								$lines = $srcobject->lines;
 								if (empty($lines) && method_exists($srcobject,'fetch_lines'))  $lines = $srcobject->fetch_lines();
 								$fk_parent_line=0;
@@ -383,6 +386,7 @@ if ($action == 'create')
 	print '<input name="ref_int" type="hidden" value="'.$ref_int.'">';
 	print '<input type="hidden" name="origin" value="'.GETPOST('origin').'">';
 	print '<input type="hidden" name="originid" value="'.GETPOST('originid').'">';
+	print '<input type="hidden" name="autocloseorders" value="'.GETPOST('autocloseorders').'">';
 	print '<table class="border" width="100%">';
 	// Ref
 	print '<tr><td class="fieldrequired">'.$langs->trans('Ref').'</td><td colspan="2">'.$langs->trans('Draft').'</td></tr>';
@@ -402,6 +406,7 @@ if ($action == 'create')
 	print $desc;
 	print '</td></tr>'."\n";
 	print '</table>';
+	
 	// Date invoice
 	print '<tr><td class="fieldrequired">'.$langs->trans('Date').'</td><td colspan="2">';
 	$html->select_date(0,'','','','',"add",1,1);
@@ -444,7 +449,7 @@ if ($action == 'create')
 		$result=$srcobject->fetch($sel);
 		if ($result > 0)
 		{
-			$commandes.= $srcobject->ref." ";
+			$commandes.= $srcobject->ref.", ";
 		}
 	}
 	print $commandes;
@@ -462,8 +467,6 @@ if ($action == 'create')
 	}
 
 	print '</table>';
-	print '</td></tr>';
-
 
 	while ($i < $n)
 	{
@@ -472,10 +475,12 @@ if ($action == 'create')
 		$i++;
 	}
 
-	print "</table>\n";
 	// Button "Create Draft"
-	print '<br><center><input type="submit" class="button" name="bouton" value="'.$langs->trans('CreateDraft').'"></center>';
+	print '<br><center><input type="submit" class="button" name="bouton" value="'.$langs->trans('CreateDraft').'" /></center>';
 	print "</form>\n";
+	
+	print '</td></tr>';
+	print "</table>\n";
 }
 
 
@@ -667,7 +672,9 @@ if (($action != 'create' && $action != 'add') || ! empty($mesgs))
 		print '<input type="hidden" name="action" value="create">';
 		print '<input type="hidden" name="origin" value="commande"><br>';
 		print '<a class="butAction" href="index.php">'.$langs->trans("GoBack").'</a>';
-		print '<input type="submit" class="butAction" value='.$langs->trans("GenerateBill").'>';
+		print '<input type="submit" class="button" value='.$langs->trans("GenerateBill").'>';
+		print '<center><br><input type="checkbox" checked="checked" name="autocloseorders"> '.$langs->trans("CloseProcessedOrdersAutomatically");
+		print '</div>';
 		print '</form>';
 		$db->free($resql);
 	}
diff --git a/htdocs/compta/journal/purchasesjournal.php b/htdocs/compta/journal/purchasesjournal.php
index b6defe0104078381b209de27f60475a481b8a17a..5aa17340f22cbe6977fdffa9b11fe1896e833c51 100755
--- a/htdocs/compta/journal/purchasesjournal.php
+++ b/htdocs/compta/journal/purchasesjournal.php
@@ -3,6 +3,7 @@
  * Copyright (C) 2007-2010	Jean Heimburger		<jean@tiaris.info>
  * Copyright (C) 2011		Juanjo Menent		<jmenent@2byte.es>
  * Copyright (C) 2012		Regis Houssin		<regis@dolibarr.fr>
+ * Copyright (C) 2011-2012 Alexandre Spangaro	  <alexandre.spangaro@gmail.com>
  *
  * 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
@@ -95,7 +96,7 @@ $sql = "SELECT f.rowid, f.facnumber, f.type, f.datef, f.libelle,";
 $sql.= " fd.total_ttc, fd.tva_tx, fd.total_ht, fd.tva as total_tva, fd.product_type,";
 $sql.= " s.rowid as socid, s.nom as name, s.code_compta_fournisseur,";
 $sql.= " p.rowid as pid, p.ref as ref, p.accountancy_code_buy,";
-$sql.= " ct.accountancy_code";
+$sql.= " ct.accountancy_code_buy as account_tva";
 $sql.= " FROM ".MAIN_DB_PREFIX."facture_fourn_det fd";
 $sql.= " LEFT JOIN ".MAIN_DB_PREFIX."c_tva ct ON fd.tva_tx = ct.taux AND ct.fk_pays = '".$idpays."'";
 $sql.= " LEFT JOIN ".MAIN_DB_PREFIX."product p ON p.rowid = fd.fk_product";
@@ -109,8 +110,8 @@ if ($result)
 {
 	$num = $db->num_rows($result);
 	// les variables
-	$cptfour = (! empty($conf->global->COMPTA_ACCOUNT_SUPPLIER))?$conf->global->COMPTA_ACCOUNT_SUPPLIER:$langs->trans("CodeNotDef");
-	$cpttva = (! empty($conf->global->COMPTA_VAT_ACCOUNT))?$conf->global->COMPTA_VAT_ACCOUNT:$langs->trans("CodeNotDef");
+	$cptfour = (! empty($conf->global->COMPTA_ACCOUNT_SUPPLIER)?$conf->global->COMPTA_ACCOUNT_SUPPLIER:$langs->trans("CodeNotDef"));
+	$cpttva = (! empty($conf->global->COMPTA_VAT_ACCOUNT)?$conf->global->COMPTA_VAT_ACCOUNT:$langs->trans("CodeNotDef"));
 
 	$tabfac = array();
 	$tabht = array();
@@ -123,14 +124,14 @@ if ($result)
 	{
 		$obj = $db->fetch_object($result);
 		// contrôles
-		$compta_soc = (! empty($obj->code_compta_fournisseur))?$obj->code_compta_fournisseur:$cptfour;
+		$compta_soc = (! empty($obj->code_compta_fournisseur)?$obj->code_compta_fournisseur:$cptfour);
 		$compta_prod = $obj->accountancy_code_buy;
 		if (empty($compta_prod))
 		{
-			if($obj->product_type == 0) $compta_prod = (! empty($conf->global->COMPTA_PRODUCT_BUY_ACCOUNT))?$conf->global->COMPTA_PRODUCT_BUY_ACCOUNT:$langs->trans("CodeNotDef");
-			else $compta_prod = (! empty($conf->global->COMPTA_SERVICE_BUY_ACCOUNT))?$conf->global->COMPTA_SERVICE_BUY_ACCOUNT:$langs->trans("CodeNotDef");
+			if($obj->product_type == 0) $compta_prod = (! empty($conf->global->COMPTA_PRODUCT_BUY_ACCOUNT)?$conf->global->COMPTA_PRODUCT_BUY_ACCOUNT:$langs->trans("CodeNotDef"));
+			else $compta_prod = (! empty($conf->global->COMPTA_SERVICE_BUY_ACCOUNT)?$conf->global->COMPTA_SERVICE_BUY_ACCOUNT:$langs->trans("CodeNotDef"));
 		}
-		$compta_tva = (! empty($obj->accountancy_code))?$obj->accountancy_code:$cpttva;
+		$compta_tva = (! empty($obj->account_tva)?$obj->account_tva:$cpttva);
 
 		$tabfac[$obj->rowid]["date"] = $obj->datef;
 		$tabfac[$obj->rowid]["ref"] = $obj->facnumber;
diff --git a/htdocs/compta/journal/sellsjournal.php b/htdocs/compta/journal/sellsjournal.php
index a702387e247a7cf161e9a17e666fd9ba2de6fb80..78d174d9565313e03913e515f150392d298526cf 100755
--- a/htdocs/compta/journal/sellsjournal.php
+++ b/htdocs/compta/journal/sellsjournal.php
@@ -3,6 +3,7 @@
  * Copyright (C) 2007-2010	Jean Heimburger		<jean@tiaris.info>
  * Copyright (C) 2011		Juanjo Menent		<jmenent@2byte.es>
  * Copyright (C) 2012		Regis Houssin		<regis@dolibarr.fr>
+ * Copyright (C) 2011-2012 Alexandre Spangaro	  <alexandre.spangaro@gmail.com>
  *
  * 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
@@ -97,7 +98,7 @@ $sql = "SELECT f.rowid, f.facnumber, f.type, f.datef, f.ref_client,";
 $sql.= " fd.product_type, fd.total_ht, fd.total_tva, fd.tva_tx, fd.total_ttc,";
 $sql.= " s.rowid as socid, s.nom as name, s.code_compta, s.client,";
 $sql.= " p.rowid as pid, p.ref as pref, p.accountancy_code_sell,";
-$sql.= " ct.accountancy_code";
+$sql.= " ct.accountancy_code_sell as account_tva";
 $sql.= " FROM ".MAIN_DB_PREFIX."facturedet fd";
 $sql.= " LEFT JOIN ".MAIN_DB_PREFIX."product p ON p.rowid = fd.fk_product";
 $sql.= " JOIN ".MAIN_DB_PREFIX."facture f ON f.rowid = fd.fk_facture";
@@ -134,7 +135,7 @@ if ($result)
 			else $compta_prod = (! empty($conf->global->COMPTA_SERVICE_SOLD_ACCOUNT)?$conf->global->COMPTA_SERVICE_SOLD_ACCOUNT:$langs->trans("CodeNotDef"));
 		}
 		$cpttva = (! empty($conf->global->COMPTA_VAT_ACCOUNT)?$conf->global->COMPTA_VAT_ACCOUNT:$langs->trans("CodeNotDef"));
-		$compta_tva = (! empty($obj->accountancy_code)?$obj->accountancy_code:$cpttva);
+		$compta_tva = (! empty($obj->account_tva)?$obj->account_tva:$cpttva);
 
     	//la ligne facture
    		$tabfac[$obj->rowid]["date"] = $obj->datef;
diff --git a/htdocs/core/lib/product.lib.php b/htdocs/core/lib/product.lib.php
index b2cbb2f55a5757359dd292fc05b135db42d96b55..dd14889dfb553fd39f7ea36d1fca8a8b0051e189 100644
--- a/htdocs/core/lib/product.lib.php
+++ b/htdocs/core/lib/product.lib.php
@@ -132,6 +132,8 @@ function product_prepare_head($object, $user)
 		}
 	}
 
+    complete_head_from_modules($conf,$langs,$object,$head,$h,'product', 'remove');
+
 	return $head;
 }
 
diff --git a/htdocs/core/triggers/interface_20_modPaypal_PaypalWorkflow.class.php b/htdocs/core/triggers/interface_20_modPaypal_PaypalWorkflow.class.php
index 3b63eb25c658f8ec847aa34458c5954840184f54..b6b74ba8253b98a7ae450b043c675a8fc8133cf0 100755
--- a/htdocs/core/triggers/interface_20_modPaypal_PaypalWorkflow.class.php
+++ b/htdocs/core/triggers/interface_20_modPaypal_PaypalWorkflow.class.php
@@ -102,47 +102,54 @@ class InterfacePaypalWorkflow
         if ($action == 'PAYPAL_PAYMENT_OK')
         {
         	dol_syslog("Trigger '".$this->name."' for action '$action' launched by ".__FILE__.". source=".$object->source." ref=".$object->ref);
-        	
-        	if ($object->source == 'membersubscription')
-        	{
-        		//require_once DOL_DOCUMENT_ROOT.'/adherents/class/adherents.class.php';
-        		
-        		// TODO add subscription treatment
-        	}
-        	else
+
+        	if (! empty($object->source))
         	{
-        		require_once DOL_DOCUMENT_ROOT.'/societe/class/societe.class.php';
-        		
-        		$soc = new Societe($this->db);
-        		
-        		// Parse element/subelement (ex: project_task)
-        		$element = $path = $filename = $object->source;
-        		if (preg_match('/^([^_]+)_([^_]+)/i',$object->source,$regs))
+        		if ($object->source == 'membersubscription')
         		{
-        			$element = $path = $regs[1];
-        			$filename = $regs[2];
-        		}
-        		// For compatibility
-        		if ($element == 'order') {
-        			$path = $filename = 'commande';
+        			//require_once DOL_DOCUMENT_ROOT.'/adherents/class/adherents.class.php';
+
+        			// TODO add subscription treatment
         		}
-        		if ($element == 'invoice') {
-        			$path = 'compta/facture'; $filename = 'facture';
+        		else
+        		{
+        			require_once DOL_DOCUMENT_ROOT.'/societe/class/societe.class.php';
+
+        			$soc = new Societe($this->db);
+
+        			// Parse element/subelement (ex: project_task)
+        			$element = $path = $filename = $object->source;
+        			if (preg_match('/^([^_]+)_([^_]+)/i',$object->source,$regs))
+        			{
+        				$element = $path = $regs[1];
+        				$filename = $regs[2];
+        			}
+        			// For compatibility
+        			if ($element == 'order') {
+        				$path = $filename = 'commande';
+        			}
+        			if ($element == 'invoice') {
+        				$path = 'compta/facture'; $filename = 'facture';
+        			}
+
+        			dol_include_once('/'.$path.'/class/'.$filename.'.class.php');
+
+        			$classname = ucfirst($filename);
+        			$obj = new $classname($this->db);
+
+        			$ret = $obj->fetch('',$object->ref);
+        			if ($ret < 0) return -1;
+
+        			// Add payer id
+        			$soc->setValueFrom('ref_int', $object->payerID, 'societe', $obj->socid);
+
+        			// Add transaction id
+        			$obj->setValueFrom('ref_int',$object->resArray["TRANSACTIONID"]);
         		}
-        		
-        		dol_include_once('/'.$path.'/class/'.$filename.'.class.php');
-        		
-        		$classname = ucfirst($filename);
-        		$obj = new $classname($this->db);
-        		
-        		$ret = $obj->fetch('',$object->ref);
-        		if ($ret < 0) return -1;
-        		
-        		// Add payer id
-        		$soc->setValueFrom('ref_int', $object->payerID, 'societe', $obj->socid);
-        		
-        		// Add transaction id
-        		$obj->setValueFrom('ref_int',$object->resArray["TRANSACTIONID"]);
+        	}
+        	else
+        	{
+        		// TODO add free tag treatment
         	}
 
         }
diff --git a/htdocs/install/mysql/migration/3.2.0-3.3.0.sql b/htdocs/install/mysql/migration/3.2.0-3.3.0.sql
index 690b429a142566116b1c6e30e725a13de2839bde..492d44fcde50893f8b4a50c077adf6942bef348d 100755
--- a/htdocs/install/mysql/migration/3.2.0-3.3.0.sql
+++ b/htdocs/install/mysql/migration/3.2.0-3.3.0.sql
@@ -92,7 +92,7 @@ ALTER TABLE llx_commandedet ADD COLUMN label varchar(255) DEFAULT NULL AFTER fk_
 ALTER TABLE llx_facturedet ADD COLUMN label varchar(255) DEFAULT NULL AFTER fk_product;
 ALTER TABLE llx_facturedet_rec ADD COLUMN label varchar(255) DEFAULT NULL AFTER product_type;
 
-ALTER TABLE llx_accountingaccount  ADD COLUMN active tinyint DEFAULT 1 NOT NULL AFTER label;
+ALTER TABLE llx_accountingaccount ADD COLUMN active tinyint DEFAULT 1 NOT NULL AFTER label;
 
 ALTER TABLE llx_actioncomm MODIFY elementtype VARCHAR(32);
 
@@ -122,59 +122,66 @@ ALTER TABLE llx_element_tag ADD UNIQUE INDEX uk_element_tag (entity, lang, tag,
 
 CREATE TABLE llx_holiday_config 
 (
-rowid    INT( 11 ) NOT NULL AUTO_INCREMENT PRIMARY KEY,
-name     VARCHAR( 255 ) NOT NULL UNIQUE,
-value    TEXT NULL
+rowid    integer NOT NULL AUTO_INCREMENT PRIMARY KEY,
+name     varchar(255) NOT NULL UNIQUE,
+value    text NULL
 ) 
 ENGINE=innodb;
 
 CREATE TABLE llx_holiday_events 
 (
-rowid    INT( 11 ) NOT NULL PRIMARY KEY AUTO_INCREMENT ,
-name     VARCHAR( 255 ) NOT NULL ,
-value    TEXT NOT NULL
+rowid    integer NOT NULL PRIMARY KEY AUTO_INCREMENT,
+entity   integer DEFAULT 1 NOT NULL,
+name     varchar(255) NOT NULL,
+value    text NOT NULL
 ) 
 ENGINE=innodb;
+ALTER TABLE llx_holiday_events ADD COLUMN entity integer DEFAULT 1 NOT NULL AFTER rowid;
+ALTER TABLE llx_holiday_events ADD UNIQUE INDEX uk_holiday_name (name, entity);
 
 CREATE TABLE llx_holiday_logs 
 (
-rowid             INT( 11 ) NOT NULL AUTO_INCREMENT PRIMARY KEY ,
-date_action       DATETIME NOT NULL ,
-fk_user_action    INT( 11 ) NOT NULL ,
-fk_user_update    INT( 11 ) NOT NULL ,
-type_action       VARCHAR( 255 ) NOT NULL ,
-prev_solde        VARCHAR( 255 ) NOT NULL ,
-new_solde         VARCHAR( 255 ) NOT NULL
+rowid             integer NOT NULL AUTO_INCREMENT PRIMARY KEY ,
+date_action       datetime NOT NULL ,
+fk_user_action    integer NOT NULL ,
+fk_user_update    integer NOT NULL ,
+type_action       varchar(255) NOT NULL ,
+prev_solde        varchar(255) NOT NULL ,
+new_solde         varchar(255) NOT NULL
 ) 
 ENGINE=innodb;
 
 CREATE TABLE llx_holiday_users 
 (
-fk_user     INT( 11 ) NOT NULL PRIMARY KEY,
-nb_holiday   FLOAT( 5 ) NOT NULL DEFAULT '0'
+fk_user     integer NOT NULL PRIMARY KEY,
+nb_holiday  real NOT NULL DEFAULT '0'
 ) 
 ENGINE=innodb;
+ALTER TABLE llx_holiday_users MODIFY COLUMN nb_holiday real NOT NULL DEFAULT '0';
 
 CREATE TABLE llx_holiday 
 (
-rowid          INT( 11 ) NOT NULL AUTO_INCREMENT PRIMARY KEY,
-fk_user        INT( 11 ) NOT NULL ,
-date_create    DATETIME NOT NULL ,
-description    VARCHAR( 255 ) NOT NULL ,
-date_debut     DATE NOT NULL ,
-date_fin       DATE NOT NULL ,
-statut         INT( 11 ) NOT NULL DEFAULT '1',
-fk_validator   INT( 11 ) NOT NULL ,
-date_valid     DATETIME NULL DEFAULT NULL ,
-fk_user_valid  INT( 11 ) NULL DEFAULT NULL ,
-date_refuse    DATETIME NULL DEFAULT NULL ,
-fk_user_refuse INT( 11 ) NULL DEFAULT NULL ,
-date_cancel    DATETIME NULL DEFAULT NULL ,
-fk_user_cancel INT( 11 ) NULL DEFAULT NULL,
-detail_refuse  varchar( 250 ) NULL DEFAULT NULL
+rowid          integer NOT NULL AUTO_INCREMENT PRIMARY KEY,
+fk_user        integer NOT NULL ,
+date_create    datetime NOT NULL ,
+description    varchar(255) NOT NULL ,
+date_debut     date NOT NULL ,
+date_fin       date NOT NULL ,
+statut         integer NOT NULL DEFAULT '1',
+fk_validator   integer NOT NULL ,
+date_valid     datetime DEFAULT NULL ,
+fk_user_valid  integer DEFAULT NULL ,
+date_refuse    datetime DEFAULT NULL ,
+fk_user_refuse integer DEFAULT NULL ,
+date_cancel    datetime DEFAULT NULL ,
+fk_user_cancel integer DEFAULT NULL,
+detail_refuse  varchar(250) DEFAULT NULL
 ) 
 ENGINE=innodb;
 
+ALTER TABLE llx_holiday ADD INDEX idx_holiday_fk_user (fk_user);
+ALTER TABLE llx_holiday ADD INDEX idx_holiday_date_debut (date_debut);
+ALTER TABLE llx_holiday ADD INDEX idx_holiday_date_fin (date_fin);
 
 INSERT INTO llx_holiday_config (rowid ,name ,value) VALUES (NULL , 'userGroup', NULL);
 INSERT INTO llx_holiday_config (rowid ,name ,value) VALUES (NULL , 'lastUpdate', NULL);
@@ -259,3 +266,9 @@ UPDATE llx_c_tva set localtax1 = 1, localtax1_type = '4', localtax2 = 0.4, local
 UPDATE llx_c_tva set localtax1 = 1, localtax1_type = '4', localtax2 = 0.4, localtax2_type = '7' where rowid= 105 and fk_pays= 10 AND localtax1_type='0';
 UPDATE llx_c_tva set localtax1 = 1, localtax1_type = '4', localtax2 = 0.4, localtax2_type = '7' where rowid= 106 and fk_pays= 10 AND localtax1_type='0';
 UPDATE llx_c_tva set localtax1 = 1, localtax1_type = '4', localtax2 = 0.4, localtax2_type = '7' where rowid= 107 and fk_pays= 10 AND localtax1_type='0';
+
+-- Modify table for accountancy
+ALTER TABLE llx_c_tva DROP COLUMN accountancy_code;
+ALTER TABLE llx_c_tva ADD COLUMN accountancy_code_sell varchar(15) DEFAULT NULL AFTER active;
+ALTER TABLE llx_c_tva ADD COLUMN accountancy_code_buy varchar(15) DEFAULT NULL AFTER accountancy_code_sell;
+ALTER TABLE llx_c_chargessociales ADD COLUMN accountancy_code varchar(15) DEFAULT NULL AFTER code;
diff --git a/htdocs/install/mysql/tables/llx_c_chargesociales.sql b/htdocs/install/mysql/tables/llx_c_chargesociales.sql
index 88de4825598c061515889e18e99797d7efc08f3f..ceae526d85d21818a9d9065fe57c97ad21c6630e 100644
--- a/htdocs/install/mysql/tables/llx_c_chargesociales.sql
+++ b/htdocs/install/mysql/tables/llx_c_chargesociales.sql
@@ -24,6 +24,7 @@ create table llx_c_chargesociales
   deductible   smallint DEFAULT 0 NOT NULL,
   active       tinyint DEFAULT 1  NOT NULL,
   code         varchar(12) NOT NULL,
+  accountancy_code varchar(15) DEFAULT NULL,
   fk_pays      integer DEFAULT 1 NOT NULL,
   module       varchar(32) NULL
 )ENGINE=innodb;
diff --git a/htdocs/install/mysql/tables/llx_c_tva.sql b/htdocs/install/mysql/tables/llx_c_tva.sql
index 9c289ebb811f380addbd682398f40915e971aa1b..0e44f26969ef5c270437e54d9e91cfbb571b58b6 100644
--- a/htdocs/install/mysql/tables/llx_c_tva.sql
+++ b/htdocs/install/mysql/tables/llx_c_tva.sql
@@ -1,6 +1,7 @@
 -- ========================================================================
 -- Copyright (C) 2005           Laurent Destailleur  <eldy@users.sourceforge.net>
 -- Copyright (C) 2010           Juanjo Menent        <jmenent@2byte.es>
+-- Copyright (C) 2011-2012      Alexandre Spangaro   <alexandre.spangaro@gmail.com>
 --
 -- 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
@@ -29,7 +30,7 @@ create table llx_c_tva
   recuperableonly   integer NOT NULL DEFAULT 0,
   note              varchar(128),
   active            tinyint DEFAULT 1 NOT NULL,
-  accountancy_code 	varchar(15)  DEFAULT NULL
-
+  accountancy_code_sell	varchar(15) DEFAULT NULL,
+  accountancy_code_buy	varchar(15) DEFAULT NULL
 )ENGINE=innodb;
 
diff --git a/htdocs/langs/en_US/orders.lang b/htdocs/langs/en_US/orders.lang
index cc63582c5ab20b0e55658309172007e28752982f..3aadefcf239846ef14a2f1ee607722a8d53c5059 100644
--- a/htdocs/langs/en_US/orders.lang
+++ b/htdocs/langs/en_US/orders.lang
@@ -150,4 +150,7 @@ OrderByMail=Mail
 OrderByFax=Fax
 OrderByEMail=EMail
 OrderByWWW=Online
-OrderByPhone=Phone
\ No newline at end of file
+OrderByPhone=Phone
+
+CreateInvoiceForThisCustomer=Create an invoice for several orders of this customer
+CloseProcessedOrdersAutomatically=Classify "Processed" all selected orders. 
\ No newline at end of file
diff --git a/htdocs/langs/fr_FR/admin.lang b/htdocs/langs/fr_FR/admin.lang
index bf2f81b0b57289773146cc2f89d35eceb8ca8778..358fa5fe168abb9908ab9466b91a95fa14ffe09d 100644
--- a/htdocs/langs/fr_FR/admin.lang
+++ b/htdocs/langs/fr_FR/admin.lang
@@ -1303,7 +1303,9 @@ Buy=Achat
 Sell=Vente
 InvoiceDateUsed=Date de facture utilisée
 YourCompanyDoesNotUseVAT=Votre institution est configurée comme non assujettie à la TVA (Accueil - Configuration - Société/Institution), aussi il n'y a aucune option sur la gestion TVA à paramétrer.
-AccountancyCode=Code compta  
+AccountancyCode=Code compta
+AccountancyCodeSell=Code compta vente
+AccountancyCodeBuy=Code compta achat 
 ##### Agenda #####
 AgendaSetup= Configuration du module actions et agenda
 PasswordTogetVCalExport= Clé pour autoriser lien export
diff --git a/htdocs/langs/fr_FR/main.lang b/htdocs/langs/fr_FR/main.lang
index 3d65734e2cefeab55301cc9855c456be35ef5df7..5a4f9ebdbb43ffce0baa6689f1e0fe1eb858b353 100644
--- a/htdocs/langs/fr_FR/main.lang
+++ b/htdocs/langs/fr_FR/main.lang
@@ -250,7 +250,7 @@ MonthOfDay=Mois du jour
 HourShort=H
 Rate=Taux
 UseLocalTax=Inclure taxe
-LocalTaxDesc=Certains pays appliquent 2 voir 3 taux sur chaque ligne de facture. Si c'est le cas, choisissez le type du deuxième et troisième taux et sa valeur. Les types possibles sont:<br>1 : local tax apply on products and services without vat (vat is not applied on local tax)<br>2 : local tax apply on products and services before vat (vat is calculated on amount + localtax)<br>3 : local tax apply on products without vat (vat is not applied on local tax)<br>4 : local tax apply on products before vat (vat is calculated on amount + localtax)<br>5 : local tax apply on services without vat (vat is not applied on local tax)<br>6 : local tax apply on services before vat (vat is calculated on amount + localtax)<br>7 : local tax is a fix amount applied on global invoice
+LocalTaxDesc=Certains pays appliquent 2 voir 3 taux sur chaque ligne de facture. Si c'est le cas, choisissez le type du deuxième et troisième taux et sa valeur. Les types possibles sont:<br>1 : taxe locale sur les produits et services hors tva (la tva n'est pas appliquée sur la taxe locale)<br>2 : taxe locale sur les produits et services avant tva (la tva est appliquée sur le montant + la taxe locale)<br>3 : taxe locale uniquement sur les produits hors tva (la tva n'est pas appliquée sur la taxe locale)<br>4 : taxe locale uniquement sur les produits avant tva (la tva est appliquée sur le montant + la taxe locale)<br>5 : taxe locale uniquement sur les services hors tva (la tva n'est pas appliquée sur la taxe locale)<br>6 : taxe locale uniquement sur les service avant tva (la tva est appliquée sur le montant + la taxe locale)<br>7 : la taxe locale est un montant fixe ajouté au total de la facture
 Bytes=Octets
 KiloBytes=Kilooctets
 MegaBytes=Mégaoctets
diff --git a/htdocs/langs/fr_FR/orders.lang b/htdocs/langs/fr_FR/orders.lang
index 329afb01a8db7ecfc0b21a60993b3edf13da1dee..d8c72f32201b2432b6b92158c8ec1dd41c0feaa7 100644
--- a/htdocs/langs/fr_FR/orders.lang
+++ b/htdocs/langs/fr_FR/orders.lang
@@ -152,3 +152,6 @@ OrderByFax=Fax
 OrderByEMail=EMail
 OrderByWWW=En ligne
 OrderByPhone=Téléphone
+
+CreateInvoiceForThisCustomer=Créer une facture à partir de plusieurs commande de ce client
+CloseProcessedOrdersAutomatically=Classer automatiquement à "Traitées" les commandes sélectionnées.
\ No newline at end of file