From 97474bf77f5316a424dee08c1b8da752f4666b08 Mon Sep 17 00:00:00 2001
From: Regis Houssin <regis@dolibarr.fr>
Date: Thu, 16 Aug 2012 19:18:24 +0200
Subject: [PATCH] Fix: strict mode safari

---
 htdocs/admin/tools/eaccelerator.php           |   2 +-
 htdocs/compta/facture.php                     |  48 +-
 htdocs/compta/facture/class/facture.class.php |   6 +-
 htdocs/compta/facture/document.php            |  13 +-
 htdocs/compta/facture/prelevement.php         | 974 +++++++++---------
 .../class/bonprelevement.class.php            |   6 +-
 htdocs/compta/prelevement/facturesrejets.php  |   8 +-
 htdocs/fichinter/list.php                     |  29 +-
 8 files changed, 544 insertions(+), 542 deletions(-)

diff --git a/htdocs/admin/tools/eaccelerator.php b/htdocs/admin/tools/eaccelerator.php
index 1b9d680729e..421e677b3d7 100644
--- a/htdocs/admin/tools/eaccelerator.php
+++ b/htdocs/admin/tools/eaccelerator.php
@@ -262,7 +262,7 @@ $var=true;
 	</tr>
 	<tr <?php $var = ! $var; print $bc[$var]; ?>>
 		<td>Cached keys</td>
-		<td align="right"><?php print $info['cachedKeys']; ?></td>
+		<td align="right"><?php print (isset($info['cachedKeys'])?$info['cachedKeys']:''); ?></td>
 	</tr>
 </table>
 <?php
diff --git a/htdocs/compta/facture.php b/htdocs/compta/facture.php
index 1894ef9e5f6..f1b2b081a64 100644
--- a/htdocs/compta/facture.php
+++ b/htdocs/compta/facture.php
@@ -28,26 +28,26 @@
  *	\brief      Page to create/see an invoice
  */
 
-require('../main.inc.php');
-require_once(DOL_DOCUMENT_ROOT."/core/class/html.formfile.class.php");
-require_once(DOL_DOCUMENT_ROOT."/core/class/html.formother.class.php");
-require_once(DOL_DOCUMENT_ROOT.'/core/modules/facture/modules_facture.php');
-require_once(DOL_DOCUMENT_ROOT.'/compta/facture/class/facture.class.php');
-require_once(DOL_DOCUMENT_ROOT.'/core/class/discount.class.php');
-require_once(DOL_DOCUMENT_ROOT.'/compta/paiement/class/paiement.class.php');
-require_once(DOL_DOCUMENT_ROOT."/core/lib/functions2.lib.php");
-require_once(DOL_DOCUMENT_ROOT.'/core/lib/invoice.lib.php');
-require_once(DOL_DOCUMENT_ROOT."/core/lib/date.lib.php");
-if (! empty($conf->commande->enabled)) require_once(DOL_DOCUMENT_ROOT.'/commande/class/commande.class.php');
-if (! empty($conf->projet->enabled))
-{
-	require_once(DOL_DOCUMENT_ROOT.'/projet/class/project.class.php');
-	require_once(DOL_DOCUMENT_ROOT.'/core/lib/project.lib.php');
+require '../main.inc.php';
+require DOL_DOCUMENT_ROOT . '/compta/facture/class/facture.class.php';
+require DOL_DOCUMENT_ROOT . '/compta/paiement/class/paiement.class.php';
+require DOL_DOCUMENT_ROOT . '/core/modules/facture/modules_facture.php';
+require DOL_DOCUMENT_ROOT . '/core/class/discount.class.php';
+require DOL_DOCUMENT_ROOT . '/core/class/html.formfile.class.php';
+require DOL_DOCUMENT_ROOT . '/core/class/html.formother.class.php';
+require DOL_DOCUMENT_ROOT . '/core/lib/invoice.lib.php';
+require_once DOL_DOCUMENT_ROOT . '/core/lib/functions2.lib.php';
+require_once DOL_DOCUMENT_ROOT . '/core/lib/date.lib.php';
+
+if (! empty($conf->commande->enabled)) {
+	require DOL_DOCUMENT_ROOT . '/commande/class/commande.class.php';
+}
+if (! empty($conf->projet->enabled)) {
+	require DOL_DOCUMENT_ROOT . '/projet/class/project.class.php';
+	require DOL_DOCUMENT_ROOT . '/core/lib/project.lib.php';
 }
 
 $langs->load('bills');
-//print 'ee'.$langs->trans('BillsCustomer');exit;
-
 $langs->load('companies');
 $langs->load('products');
 $langs->load('main');
@@ -2374,7 +2374,7 @@ else if ($id > 0 || ! empty($ref))
         print '<table class="nobordernopadding" width="100%"><tr><td>';
         print $langs->trans('RefCustomer');
         print '</td>';
-        if ($action != 'refclient' && $object->brouillon) print '<td align="right"><a href="'.$_SERVER['PHP_SELF'].'?action=refclient&amp;id='.$object->id.'">'.img_edit($langs->trans('Modify')).'</a></td>';
+        if ($action != 'refclient' && ! empty($object->brouillon)) print '<td align="right"><a href="'.$_SERVER['PHP_SELF'].'?action=refclient&amp;id='.$object->id.'">'.img_edit($langs->trans('Modify')).'</a></td>';
         print '</tr></table>';
         print '</td>';
         print '<td colspan="5">';
@@ -2547,7 +2547,7 @@ else if ($id > 0 || ! empty($ref))
         print '<table class="nobordernopadding" width="100%"><tr><td>';
         print $langs->trans('Date');
         print '</td>';
-        if ($object->type != 2 && $action != 'editinvoicedate' && $object->brouillon && $user->rights->facture->creer) print '<td align="right"><a href="'.$_SERVER["PHP_SELF"].'?action=editinvoicedate&amp;facid='.$object->id.'">'.img_edit($langs->trans('SetDate'),1).'</a></td>';
+        if ($object->type != 2 && $action != 'editinvoicedate' && ! empty($object->brouillon) && $user->rights->facture->creer) print '<td align="right"><a href="'.$_SERVER["PHP_SELF"].'?action=editinvoicedate&amp;facid='.$object->id.'">'.img_edit($langs->trans('SetDate'),1).'</a></td>';
         print '</tr></table>';
         print '</td><td colspan="3">';
 
@@ -2770,7 +2770,7 @@ else if ($id > 0 || ! empty($ref))
         print '<table class="nobordernopadding" width="100%"><tr><td>';
         print $langs->trans('DateMaxPayment');
         print '</td>';
-        if ($object->type != 2 && $action != 'editpaymentterm' && $object->brouillon && $user->rights->facture->creer) print '<td align="right"><a href="'.$_SERVER["PHP_SELF"].'?action=editpaymentterm&amp;facid='.$object->id.'">'.img_edit($langs->trans('SetDate'),1).'</a></td>';
+        if ($object->type != 2 && $action != 'editpaymentterm' && ! empty($object->brouillon) && $user->rights->facture->creer) print '<td align="right"><a href="'.$_SERVER["PHP_SELF"].'?action=editpaymentterm&amp;facid='.$object->id.'">'.img_edit($langs->trans('SetDate'),1).'</a></td>';
         print '</tr></table>';
         print '</td><td colspan="3">';
         if ($object->type != 2)
@@ -2782,7 +2782,7 @@ else if ($id > 0 || ! empty($ref))
             else
             {
                 print dol_print_date($object->date_lim_reglement,'daytext');
-                if ($object->date_lim_reglement < ($now - $conf->facture->client->warning_delay) && ! $object->paye && $object->statut == 1 && ! $object->am) print img_warning($langs->trans('Late'));
+                if ($object->date_lim_reglement < ($now - $conf->facture->client->warning_delay) && ! $object->paye && $object->statut == 1 && ! isset($object->am)) print img_warning($langs->trans('Late'));
             }
         }
         else
@@ -2796,7 +2796,7 @@ else if ($id > 0 || ! empty($ref))
         print '<table class="nobordernopadding" width="100%"><tr><td>';
         print $langs->trans('PaymentConditionsShort');
         print '</td>';
-        if ($object->type != 2 && $action != 'editconditions' && $object->brouillon && $user->rights->facture->creer) print '<td align="right"><a href="'.$_SERVER["PHP_SELF"].'?action=editconditions&amp;facid='.$object->id.'">'.img_edit($langs->trans('SetConditions'),1).'</a></td>';
+        if ($object->type != 2 && $action != 'editconditions' && ! empty($object->brouillon) && $user->rights->facture->creer) print '<td align="right"><a href="'.$_SERVER["PHP_SELF"].'?action=editconditions&amp;facid='.$object->id.'">'.img_edit($langs->trans('SetConditions'),1).'</a></td>';
         print '</tr></table>';
         print '</td><td colspan="3">';
         if ($object->type != 2)
@@ -2821,7 +2821,7 @@ else if ($id > 0 || ! empty($ref))
         print '<table class="nobordernopadding" width="100%"><tr><td>';
         print $langs->trans('PaymentMode');
         print '</td>';
-        if ($action != 'editmode' && $object->brouillon && $user->rights->facture->creer) print '<td align="right"><a href="'.$_SERVER["PHP_SELF"].'?action=editmode&amp;facid='.$object->id.'">'.img_edit($langs->trans('SetMode'),1).'</a></td>';
+        if ($action != 'editmode' && ! empty($object->brouillon) && $user->rights->facture->creer) print '<td align="right"><a href="'.$_SERVER["PHP_SELF"].'?action=editmode&amp;facid='.$object->id.'">'.img_edit($langs->trans('SetMode'),1).'</a></td>';
         print '</tr></table>';
         print '</td><td colspan="3">';
         if ($action == 'editmode')
@@ -2868,7 +2868,7 @@ else if ($id > 0 || ! empty($ref))
         print '<td align="left" colspan="3">'.($object->getLibStatut(4,$totalpaye)).'</td></tr>';
 
         // Project
-        if ($conf->projet->enabled)
+        if (! empty($conf->projet->enabled))
         {
             $langs->load('projects');
             print '<tr>';
diff --git a/htdocs/compta/facture/class/facture.class.php b/htdocs/compta/facture/class/facture.class.php
index 87405b5e0be..6e7c1ac9043 100644
--- a/htdocs/compta/facture/class/facture.class.php
+++ b/htdocs/compta/facture/class/facture.class.php
@@ -2996,12 +2996,10 @@ class Facture extends CommonInvoice
     function getLinesArray()
     {
         $sql = 'SELECT l.rowid, l.description, l.fk_product, l.product_type, l.qty, l.tva_tx,';
-        $sql.= ' l.fk_remise_except,';
+        $sql.= ' l.fk_remise_except, localtax1_tx, localtax2_tx,';
         $sql.= ' l.remise_percent, l.subprice, l.info_bits, l.rang, l.special_code, l.fk_parent_line,';
         $sql.= ' l.total_ht, l.total_tva, l.total_ttc, l.fk_product_fournisseur_price as fk_fournprice, l.buy_price_ht as pa_ht,';
-        $sql.= ' l.date_start,';
-        $sql.= ' l.date_end,';
-        $sql.= ' l.product_type,';
+        $sql.= ' l.date_start, l.date_end,';
         $sql.= ' p.ref as product_ref, p.fk_product_type, p.label as product_label,';
         $sql.= ' p.description as product_desc';
         $sql.= ' FROM '.MAIN_DB_PREFIX.'facturedet as l';
diff --git a/htdocs/compta/facture/document.php b/htdocs/compta/facture/document.php
index 05750bb2238..55a1b536fda 100644
--- a/htdocs/compta/facture/document.php
+++ b/htdocs/compta/facture/document.php
@@ -38,10 +38,11 @@ $langs->load('other');
 $langs->load("bills");
 
 
-$action		= GETPOST('action');
-$confirm	= GETPOST('confirm');
-$id			= GETPOST('facid','int');
-$ref		= GETPOST('ref');
+$id=(GETPOST('id','int')?GETPOST('id','int'):GETPOST('facid','int'));  // For backward compatibility
+$ref=GETPOST('ref','alpha');
+$socid=GETPOST('socid','int');
+$action=GETPOST('action','alpha');
+$confirm=GETPOST('confirm', 'alpha');
 
 // Security check
 if ($user->societe_id)
@@ -70,7 +71,7 @@ $object = new Facture($db);
  */
 
 // Envoi fichier
-if ($_POST["sendit"] && ! empty($conf->global->MAIN_UPLOAD_DOC))
+if (GETPOST('sendit') && ! empty($conf->global->MAIN_UPLOAD_DOC))
 {
 	if ($object->fetch($id))
 	{
@@ -106,8 +107,6 @@ llxHeader();
 
 $form = new Form($db);
 
-$id = $_GET['facid']?$_GET['facid']:$_GET['id'];
-$ref= $_GET['ref'];
 if ($id > 0 || ! empty($ref))
 {
 	if ($object->fetch($id,$ref) > 0)
diff --git a/htdocs/compta/facture/prelevement.php b/htdocs/compta/facture/prelevement.php
index 47f6c7ff0f8..ab3b2ba3d8a 100644
--- a/htdocs/compta/facture/prelevement.php
+++ b/htdocs/compta/facture/prelevement.php
@@ -1,8 +1,9 @@
 <?php
-/* Copyright (C) 2002-2005 Rodolphe Quiedeville <rodolphe@quiedeville.org>
- * Copyright (C) 2004      Eric Seigne          <eric.seigne@ryxeo.com>
- * Copyright (C) 2004-2010 Laurent Destailleur  <eldy@users.sourceforge.net>
- * Copyright (C) 2010      Juanjo Menent        <jmenent@2byte.es>
+/* Copyright (C) 2002-2005	Rodolphe Quiedeville	<rodolphe@quiedeville.org>
+ * Copyright (C) 2004		Eric Seigne				<eric.seigne@ryxeo.com>
+ * Copyright (C) 2004-2010	Laurent Destailleur		<eldy@users.sourceforge.net>
+ * Copyright (C) 2005-2012	Regis Houssin			<regis@dolibarr.fr>
+ * Copyright (C) 2010		Juanjo Menent			<jmenent@2byte.es>
  *
  * 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
@@ -36,45 +37,56 @@ $langs->load("bills");
 $langs->load("banks");
 $langs->load("withdrawals");
 
-// Security check
-if ($user->societe_id > 0)
-{
-    $action = '';
-    $socid = $user->societe_id;
-}
+$id=(GETPOST('id','int')?GETPOST('id','int'):GETPOST('facid','int'));  // For backward compatibility
+$ref=GETPOST('ref','alpha');
+$socid=GETPOST('socid','int');
+$action=GETPOST('action','alpha');
+
+$fieldid = (! empty($ref)?'facnumber':'rowid');
+if ($user->societe_id) $socid=$user->societe_id;
+$result = restrictedArea($user, 'facture', $id, '', '', 'fk_soc', $fieldid);
 
 $object = new Facture($db);
 
+// Load object
+if ($id > 0 || ! empty($ref))
+{
+	$ret=$object->fetch($id, $ref);
+	if ($ret > 0)
+	{
+		$object->fetch_thirdparty();
+	}
+}
 
 /*
  * Actions
  */
 
-if ($_GET["action"] == "new")
+if ($action == "new")
 {
-    if ($object->fetch($_GET["facid"]))
+    if ($object->id > 0)
     {
         $result = $object->demande_prelevement($user);
         if ($result > 0)
         {
-            Header("Location: prelevement.php?facid=".$object->id);
+            Header("Location: ".$_SERVER['PHP_SELF']."?id=".$object->id);
             exit;
         }
         else
         {
-            $mesg='<div class="error">'.$object->error.'</div>';
+        	setEventMessage($object->error, 'errors');
         }
     }
 }
 
-if ($_GET["action"] == "delete")
+if ($action == "delete")
 {
-    if ($object->fetch($_GET["facid"]))
+    if ($object->id > 0)
     {
-        $result = $object->demande_prelevement_delete($user,$_GET["did"]);
+        $result = $object->demande_prelevement_delete($user, GETPOST('did'));
         if ($result == 0)
         {
-            Header("Location: prelevement.php?facid=".$object->id);
+            Header("Location: ".$_SERVER['PHP_SELF']."?id=".$object->id);
             exit;
         }
     }
@@ -87,7 +99,7 @@ if ($_GET["action"] == "delete")
 
 $now=dol_now();
 
-llxHeader('',$langs->trans("Bill"));
+llxHeader('', $langs->trans("Bill"));
 
 $form = new Form($db);
 
@@ -97,477 +109,465 @@ $form = new Form($db);
 /*                                                                             */
 /* *************************************************************************** */
 
-if ($_REQUEST["facid"] > 0 || $_REQUEST["ref"])
+if ($object->id > 0)
 {
-    if ($object->fetch($_REQUEST["facid"], $_REQUEST["ref"]) > 0)
-    {
-        dol_htmloutput_mesg($mesg);
-
-        $soc = new Societe($db);
-        $soc->fetch($object->socid);
-
-        $totalpaye  = $object->getSommePaiement();
-        $totalcreditnotes = $object->getSumCreditNotesUsed();
-        $totaldeposits = $object->getSumDepositsUsed();
-        //print "totalpaye=".$totalpaye." totalcreditnotes=".$totalcreditnotes." totaldeposts=".$totaldeposits;
-
-        // We can also use bcadd to avoid pb with floating points
-        // For example print 239.2 - 229.3 - 9.9; does not return 0.
-        //$resteapayer=bcadd($object->total_ttc,$totalpaye,$conf->global->MAIN_MAX_DECIMALS_TOT);
-        //$resteapayer=bcadd($resteapayer,$totalavoir,$conf->global->MAIN_MAX_DECIMALS_TOT);
-        $resteapayer = price2num($object->total_ttc - $totalpaye - $totalcreditnotes - $totaldeposits,'MT');
-
-        if ($object->paye) $resteapayer=0;
-        $resteapayeraffiche=$resteapayer;
-
-        $absolute_discount=$soc->getAvailableDiscounts('','fk_facture_source IS NULL');
-        $absolute_creditnote=$soc->getAvailableDiscounts('','fk_facture_source IS NOT NULL');
-        $absolute_discount=price2num($absolute_discount,'MT');
-        $absolute_creditnote=price2num($absolute_creditnote,'MT');
-
-        $author = new User($db);
-        if ($object->user_author)
-        {
-            $author->fetch($object->user_author);
-        }
-
-        $head = facture_prepare_head($object);
-
-        dol_fiche_head($head, 'standingorders', $langs->trans('InvoiceCustomer'),0,'bill');
-
-        /*
-         *   Facture
-         */
-        print '<table class="border" width="100%">';
-
-        $linkback = '<a href="'.DOL_URL_ROOT.'/compta/facture/list.php'.(! empty($socid)?'?socid='.$socid:'').'">'.$langs->trans("BackToList").'</a>';
-
-        // Ref
-        print '<tr><td width="20%">'.$langs->trans("Ref").'</td><td colspan="5">';
-        $morehtmlref='';
-        $discount=new DiscountAbsolute($db);
-        $result=$discount->fetch(0,$object->id);
-        if ($result > 0)
-        {
-            $morehtmlref=' ('.$langs->trans("CreditNoteConvertedIntoDiscount",$discount->getNomUrl(1,'discount')).')';
-        }
-        if ($result < 0)
-        {
-            dol_print_error('',$discount->error);
-        }
-        print $form->showrefnav($object, 'ref', $linkback, 1, 'facnumber', 'ref', $morehtmlref);
-        print "</td></tr>";
-
-		// Ref customer
-		print '<tr><td width="20%">';
-        print '<table class="nobordernopadding" width="100%"><tr><td>';
-        print $langs->trans('RefCustomer');
-        print '</td>';
-        print '</tr></table>';
-        print '</td>';
-        print '<td colspan="5">';
-        print $object->ref_client;
-		print '</td></tr>';
-
-		// Third party
-        print '<tr><td>'.$langs->trans('Company').'</td>';
-        print '<td colspan="5">'.$soc->getNomUrl(1,'compta');
-        print ' &nbsp; (<a href="'.DOL_URL_ROOT.'/compta/facture/list.php?socid='.$object->socid.'">'.$langs->trans('OtherBills').'</a>)</td>';
-        print '</tr>';
-
-        // Type
-        print '<tr><td>'.$langs->trans('Type').'</td><td colspan="5">';
-        print $object->getLibType();
-        if ($object->type == 1)
-        {
-            $facreplaced=new Facture($db);
-            $facreplaced->fetch($object->fk_facture_source);
-            print ' ('.$langs->transnoentities("ReplaceInvoice",$facreplaced->getNomUrl(1)).')';
-        }
-        if ($object->type == 2)
-        {
-            $facusing=new Facture($db);
-            $facusing->fetch($object->fk_facture_source);
-            print ' ('.$langs->transnoentities("CorrectInvoice",$facusing->getNomUrl(1)).')';
-        }
-
-        $facidavoir=$object->getListIdAvoirFromInvoice();
-        if (count($facidavoir) > 0)
-        {
-            print ' ('.$langs->transnoentities("InvoiceHasAvoir");
-            $i=0;
-            foreach($facidavoir as $id)
-            {
-                if ($i==0) print ' ';
-                else print ',';
-                $facavoir=new Facture($db);
-                $facavoir->fetch($id);
-                print $facavoir->getNomUrl(1);
-            }
-            print ')';
-        }
-        if ($facidnext > 0)
-        {
-            $facthatreplace=new Facture($db);
-            $facthatreplace->fetch($facidnext);
-            print ' ('.$langs->transnoentities("ReplacedByInvoice",$facthatreplace->getNomUrl(1)).')';
-        }
-        print '</td></tr>';
-
-        // Discounts
-        print '<tr><td>'.$langs->trans('Discounts').'</td><td colspan="5">';
-        if ($soc->remise_client) print $langs->trans("CompanyHasRelativeDiscount",$soc->remise_client);
-        else print $langs->trans("CompanyHasNoRelativeDiscount");
-        print '. ';
-        if ($absolute_discount > 0)
-        {
-            if ($object->statut > 0 || $object->type == 2 || $object->type == 3)
-            {
-                if ($object->statut == 0)
-                {
-                    print $langs->trans("CompanyHasAbsoluteDiscount",price($absolute_discount),$langs->transnoentities("Currency".$conf->currency)).'. ';
-                }
-                else
-                {
-                    if ($object->statut < 1 || $object->type == 2 || $object->type == 3)
-                    {
-                        $text=$langs->trans("CompanyHasAbsoluteDiscount",price($absolute_discount),$langs->transnoentities("Currency".$conf->currency));
-                        print '<br>'.$text.'.<br>';
-                    }
-                    else
-                    {
-                        $text=$langs->trans("CompanyHasAbsoluteDiscount",price($absolute_discount),$langs->transnoentities("Currency".$conf->currency));
-                        $text2=$langs->trans("AbsoluteDiscountUse");
-                        print $form->textwithpicto($text,$text2);
-                    }
-                }
-            }
-            else
-            {
-                // Remise dispo de type non avoir
-                $filter='fk_facture_source IS NULL';
-                print '<br>';
-                $form->form_remise_dispo($_SERVER["PHP_SELF"].'?facid='.$object->id,0,'remise_id',$soc->id,$absolute_discount,$filter,$resteapayer);
-            }
-        }
-        if ($absolute_creditnote > 0)
-        {
-            // If validated, we show link "add credit note to payment"
-            if ($object->statut != 1 || $object->type == 2 || $object->type == 3)
-            {
-                if ($object->statut == 0 && $object->type != 3)
-                {
-                    $text=$langs->trans("CompanyHasCreditNote",price($absolute_creditnote),$langs->transnoentities("Currency".$conf->currency));
-                    print $form->textwithpicto($text,$langs->trans("CreditNoteDepositUse"));
-                }
-                else print $langs->trans("CompanyHasCreditNote",price($absolute_creditnote),$langs->transnoentities("Currency".$conf->currency)).'.';
-            }
-            else
-            {
-                // Remise dispo de type avoir
-                $filter='fk_facture_source IS NOT NULL';
-                if (! $absolute_discount) print '<br>';
-                $form->form_remise_dispo($_SERVER["PHP_SELF"].'?facid='.$object->id,0,'remise_id_for_payment',$soc->id,$absolute_creditnote,$filter,$resteapayer);
-            }
-        }
-        if (! $absolute_discount && ! $absolute_creditnote) print $langs->trans("CompanyHasNoAbsoluteDiscount").'.';
-        print '</td></tr>';
-
-        // Date invoice
-        print '<tr><td>';
-        print '<table class="nobordernopadding" width="100%"><tr><td>';
-        print $langs->trans('Date');
-        print '</td>';
-        if ($object->type != 2 && $_GET['action'] != 'editinvoicedate' && $object->brouillon && $user->rights->facture->creer) print '<td align="right"><a href="'.$_SERVER["PHP_SELF"].'?action=editinvoicedate&amp;facid='.$object->id.'">'.img_edit($langs->trans('SetDate'),1).'</a></td>';
-        print '</tr></table>';
-        print '</td><td colspan="3">';
-
-        if ($object->type != 2)
-        {
-            if ($_GET['action'] == 'editinvoicedate')
-            {
-                $form->form_date($_SERVER['PHP_SELF'].'?facid='.$object->id,$object->date,'invoicedate');
-            }
-            else
-            {
-                print dol_print_date($object->date,'daytext');
-            }
-        }
-        else
-        {
-            print dol_print_date($object->date,'daytext');
-        }
-        print '</td>';
-        print '</tr>';
-
-        // Date payment term
-        print '<tr><td>';
-        print '<table class="nobordernopadding" width="100%"><tr><td>';
-        print $langs->trans('DateMaxPayment');
-        print '</td>';
-        if ($object->type != 2 && $_GET['action'] != 'editpaymentterm' && $object->brouillon && $user->rights->facture->creer) print '<td align="right"><a href="'.$_SERVER["PHP_SELF"].'?action=editpaymentterm&amp;facid='.$object->id.'">'.img_edit($langs->trans('SetDate'),1).'</a></td>';
-        print '</tr></table>';
-        print '</td><td colspan="3">';
-        if ($object->type != 2)
-        {
-            if ($_GET['action'] == 'editpaymentterm')
-            {
-                $form->form_date($_SERVER['PHP_SELF'].'?facid='.$object->id,$object->date_lim_reglement,'paymentterm');
-            }
-            else
-            {
-                print dol_print_date($object->date_lim_reglement,'daytext');
-                if ($object->date_lim_reglement < ($now - $conf->facture->client->warning_delay) && ! $object->paye && $object->statut == 1 && ! $object->am) print img_warning($langs->trans('Late'));
-            }
-        }
-        else
-        {
-            print '&nbsp;';
-        }
-        print '</td></tr>';
-
-        // Conditions de reglement
-        print '<tr><td>';
-        print '<table class="nobordernopadding" width="100%"><tr><td>';
-        print $langs->trans('PaymentConditionsShort');
-        print '</td>';
-        if ($object->type != 2 && $_GET['action'] != 'editconditions' && $object->brouillon && $user->rights->facture->creer) print '<td align="right"><a href="'.$_SERVER["PHP_SELF"].'?action=editconditions&amp;facid='.$object->id.'">'.img_edit($langs->trans('SetConditions'),1).'</a></td>';
-        print '</tr></table>';
-        print '</td><td colspan="3">';
-        if ($object->type != 2)
-        {
-            if ($_GET['action'] == 'editconditions')
-            {
-                $form->form_conditions_reglement($_SERVER['PHP_SELF'].'?facid='.$object->id,$object->cond_reglement_id,'cond_reglement_id');
-            }
-            else
-            {
-                $form->form_conditions_reglement($_SERVER['PHP_SELF'].'?facid='.$object->id,$object->cond_reglement_id,'none');
-            }
-        }
-        else
-        {
-            print '&nbsp;';
-        }
-        print '</td></tr>';
-
-        // Mode de reglement
-        print '<tr><td>';
-        print '<table class="nobordernopadding" width="100%"><tr><td>';
-        print $langs->trans('PaymentMode');
-        print '</td>';
-        if ($_GET['action'] != 'editmode' && $object->brouillon && $user->rights->facture->creer) print '<td align="right"><a href="'.$_SERVER["PHP_SELF"].'?action=editmode&amp;facid='.$object->id.'">'.img_edit($langs->trans('SetMode'),1).'</a></td>';
-        print '</tr></table>';
-        print '</td><td colspan="3">';
-        if ($_GET['action'] == 'editmode')
-        {
-            $form->form_modes_reglement($_SERVER['PHP_SELF'].'?facid='.$object->id,$object->mode_reglement_id,'mode_reglement_id');
-        }
-        else
-        {
-            $form->form_modes_reglement($_SERVER['PHP_SELF'].'?facid='.$object->id,$object->mode_reglement_id,'none');
-        }
-        print '</td></tr>';
-
-        // Montants
-        print '<tr><td>'.$langs->trans('AmountHT').'</td>';
-        print '<td align="right" colspan="2" nowrap>'.price($object->total_ht).'</td>';
-        print '<td>'.$langs->trans('Currency'.$conf->currency).'</td></tr>';
-        print '<tr><td>'.$langs->trans('AmountVAT').'</td><td align="right" colspan="2" nowrap>'.price($object->total_tva).'</td>';
-        print '<td>'.$langs->trans('Currency'.$conf->currency).'</td></tr>';
-
-        // Amount Local Taxes
-        if ($mysoc->country_code=='ES')
-        {
-            if ($mysoc->localtax1_assuj=="1") //Localtax1 RE
-            {
-                print '<tr><td>'.$langs->transcountry("AmountLT1",$mysoc->country_code).'</td>';
-                print '<td align="right" colspan="2" nowrap>'.price($object->total_localtax1).'</td>';
-                print '<td>'.$langs->trans("Currency".$conf->currency).'</td></tr>';
-            }
-            if ($mysoc->localtax2_assuj=="1") //Localtax2 IRPF
-            {
-                print '<tr><td>'.$langs->transcountry("AmountLT2",$mysoc->country_code).'</td>';
-                print '<td align="right" colspan="2" nowrap>'.price($object->total_localtax2).'</td>';
-                print '<td>'.$langs->trans("Currency".$conf->currency).'</td></tr>';
-            }
-        }
-
-        print '<tr><td>'.$langs->trans('AmountTTC').'</td><td align="right" colspan="2" nowrap>'.price($object->total_ttc).'</td>';
-        print '<td>'.$langs->trans('Currency'.$conf->currency).'</td></tr>';
-
-        // Statut
-        print '<tr><td>'.$langs->trans('Status').'</td>';
-        print '<td align="left" colspan="3">'.($object->getLibStatut(4,$totalpaye)).'</td></tr>';
-
-        print '<tr><td>'.$langs->trans("RIB").'</td><td colspan="5">';
-        print $soc->display_rib();
-        print '</td></tr>';
-
-        print '</table>';
-
-        dol_fiche_end();
-
-
-
-        /*
-         * Withdrawal request
-         */
-
-        $sql = "SELECT pfd.rowid, pfd.traite, pfd.date_demande as date_demande";
-        $sql .= " , pfd.date_traite as date_traite";
-        $sql .= " , pfd.amount";
-        $sql .= " , u.rowid as user_id, u.name, u.firstname, u.login";
-        $sql .= " FROM ".MAIN_DB_PREFIX."prelevement_facture_demande as pfd";
-        $sql .= " , ".MAIN_DB_PREFIX."user as u";
-        $sql .= " WHERE fk_facture = ".$object->id;
-        $sql .= " AND pfd.fk_user_demande = u.rowid";
-        $sql .= " AND pfd.traite = 0";
-        $sql .= " ORDER BY pfd.date_demande DESC";
-
-        $result_sql = $db->query($sql);
-        if ($result_sql)
-        {
-            $num = $db->num_rows($result_sql);
-        }
-
-
-        /*
-         * Buttons
-         */
-        print "\n<div class=\"tabsAction\">\n";
-
-        // Add a withdraw request
-        if ($object->statut > 0 && $object->paye == 0 && $num == 0)
-        {
-            if ($user->rights->prelevement->bons->creer)
-            {
-                print '<a class="butAction" href="prelevement.php?facid='.$object->id.'&amp;action=new">'.$langs->trans("MakeWithdrawRequest").'</a>';
-            }
-            else
-            {
-                print '<a class="butActionRefused" href="#">'.$langs->trans("MakeWithdrawRequest").'</a>';
-            }
-        }
-
-        print "</div><br>\n";
-
-
-        print $langs->trans("DoStandingOrdersBeforePayments").'<br>';
-
-
-        /*
-         * Withdrawals
-         */
-        print '<table class="noborder" width="100%">';
-
-        print '<tr class="liste_titre">';
-        print '<td align="left">'.$langs->trans("DateRequest").'</td>';
-        print '<td align="center">'.$langs->trans("DateProcess").'</td>';
-        print '<td align="center">'.$langs->trans("Amount").'</td>';
-        print '<td align="center">'.$langs->trans("WithdrawalReceipt").'</td>';
-        print '<td align="center">'.$langs->trans("User").'</td><td>&nbsp;</td><td>&nbsp;</td>';
-        print '</tr>';
-        $var=True;
-
-        if ($result_sql)
-        {
-            $i = 0;
-
-            while ($i < $num)
-            {
-                $obj = $db->fetch_object($result_sql);
-                $var=!$var;
-
-                print "<tr ".$bc[$var].">";
-                print '<td align="left">'.dol_print_date($db->jdate($obj->date_demande),'day')."</td>\n";
-                print '<td align="center">'.$langs->trans("OrderWaiting").'</td>';
-                print '<td align="center">'.price($obj->amount).'</td>';
-                print '<td align="center">-</td>';
-                print '<td align="center"><a href="'.DOL_URL_ROOT.'/user/fiche.php?id='.$obj->user_id.'">'.img_object($langs->trans("ShowUser"),'user').' '.$obj->login.'</a></td>';
-                print '<td>&nbsp;</td>';
-                print '<td>';
-                print '<a href="prelevement.php?facid='.$object->id.'&amp;action=delete&amp;did='.$obj->rowid.'">';
-                print img_delete();
-                print '</a></td>';
-                print "</tr>\n";
-                $i++;
-            }
-
-            $db->free($result_sql);
-        }
-        else
-        {
-            dol_print_error($db);
-        }
-
-        $sql = "SELECT pfd.rowid, pfd.traite, pfd.date_demande,";
-        $sql.= " pfd.date_traite, pfd.fk_prelevement_bons, pfd.amount,";
-        $sql.= " pb.ref,";
-        $sql.= " u.rowid as user_id, u.name, u.firstname, u.login";
-        $sql.= " FROM ".MAIN_DB_PREFIX."prelevement_facture_demande as pfd,";
-        $sql.= " ".MAIN_DB_PREFIX."prelevement_bons as pb,";
-        $sql.= " ".MAIN_DB_PREFIX."user as u";
-        $sql.= " WHERE fk_facture = ".$object->id;
-        $sql.= " AND pfd.fk_user_demande = u.rowid";
-        $sql.= " AND pb.rowid = pfd.fk_prelevement_bons";
-        $sql.= " AND pfd.traite = 1";
-        $sql.= " ORDER BY pfd.date_demande DESC";
-
-        $result = $db->query($sql);
-        if ($result)
-        {
-            $num = $db->num_rows($result);
-            $i = 0;
-
-            while ($i < $num)
-            {
-                $obj = $db->fetch_object($result);
-                $var=!$var;
-
-                print "<tr $bc[$var]>";
-
-                print '<td align="left">'.dol_print_date($db->jdate($obj->date_demande),'day')."</td>\n";
-
-                print '<td align="center">'.dol_print_date($db->jdate($obj->date_traite),'day')."</td>\n";
-
-                print '<td align="center">'.price($obj->amount).'</td>';
-
-                print '<td align="center">';
-                $withdrawreceipt=new BonPrelevement($db);
-                $withdrawreceipt->id=$obj->fk_prelevement_bons;
-                $withdrawreceipt->ref=$obj->ref;
-                print $withdrawreceipt->getNomUrl(1);
-                print "</td>\n";
-
-                print '<td align="center"><a href="'.DOL_URL_ROOT.'/user/fiche.php?id='.$obj->user_id.'">'.img_object($langs->trans("ShowUser"),'user').' '.$obj->login.'</a></td>';
-
-                print '<td>&nbsp;</td>';
-                print '<td>&nbsp;</td>';
-
-                print "</tr>\n";
-                $i++;
-            }
-
-            $db->free($result);
-        }
-        else
-        {
-            dol_print_error($db);
-        }
-
-        print "</table>";
-
-    }
-    else
-    {
-        /* Invoice not found */
-        print $langs->trans("ErrorBillNotFound",$_GET["facid"]);
-    }
+	$totalpaye  = $object->getSommePaiement();
+	$totalcreditnotes = $object->getSumCreditNotesUsed();
+	$totaldeposits = $object->getSumDepositsUsed();
+	//print "totalpaye=".$totalpaye." totalcreditnotes=".$totalcreditnotes." totaldeposts=".$totaldeposits;
+
+	// We can also use bcadd to avoid pb with floating points
+	// For example print 239.2 - 229.3 - 9.9; does not return 0.
+	//$resteapayer=bcadd($object->total_ttc,$totalpaye,$conf->global->MAIN_MAX_DECIMALS_TOT);
+	//$resteapayer=bcadd($resteapayer,$totalavoir,$conf->global->MAIN_MAX_DECIMALS_TOT);
+	$resteapayer = price2num($object->total_ttc - $totalpaye - $totalcreditnotes - $totaldeposits,'MT');
+
+	if ($object->paye) $resteapayer=0;
+	$resteapayeraffiche=$resteapayer;
+
+	$absolute_discount=$object->thirdparty->getAvailableDiscounts('','fk_facture_source IS NULL');
+	$absolute_creditnote=$object->thirdparty->getAvailableDiscounts('','fk_facture_source IS NOT NULL');
+	$absolute_discount=price2num($absolute_discount,'MT');
+	$absolute_creditnote=price2num($absolute_creditnote,'MT');
+
+	$author = new User($db);
+	if ($object->user_author)
+	{
+		$author->fetch($object->user_author);
+	}
+
+	$head = facture_prepare_head($object);
+
+	dol_fiche_head($head, 'standingorders', $langs->trans('InvoiceCustomer'),0,'bill');
+
+	/*
+	 *   Facture
+	*/
+	print '<table class="border" width="100%">';
+
+	$linkback = '<a href="'.DOL_URL_ROOT.'/compta/facture/list.php'.(! empty($socid)?'?socid='.$socid:'').'">'.$langs->trans("BackToList").'</a>';
+
+	// Ref
+	print '<tr><td width="20%">'.$langs->trans("Ref").'</td><td colspan="5">';
+	$morehtmlref='';
+	$discount=new DiscountAbsolute($db);
+	$result=$discount->fetch(0,$object->id);
+	if ($result > 0)
+	{
+		$morehtmlref=' ('.$langs->trans("CreditNoteConvertedIntoDiscount",$discount->getNomUrl(1,'discount')).')';
+	}
+	if ($result < 0)
+	{
+		dol_print_error('',$discount->error);
+	}
+	print $form->showrefnav($object, 'ref', $linkback, 1, 'facnumber', 'ref', $morehtmlref);
+	print "</td></tr>";
+
+	// Ref customer
+	print '<tr><td width="20%">';
+	print '<table class="nobordernopadding" width="100%"><tr><td>';
+	print $langs->trans('RefCustomer');
+	print '</td>';
+	print '</tr></table>';
+	print '</td>';
+	print '<td colspan="5">';
+	print $object->ref_client;
+	print '</td></tr>';
+
+	// Third party
+	print '<tr><td>'.$langs->trans('Company').'</td>';
+	print '<td colspan="5">'.$object->thirdparty->getNomUrl(1,'compta');
+	print ' &nbsp; (<a href="'.DOL_URL_ROOT.'/compta/facture/list.php?socid='.$object->socid.'">'.$langs->trans('OtherBills').'</a>)</td>';
+	print '</tr>';
+
+	// Type
+	print '<tr><td>'.$langs->trans('Type').'</td><td colspan="5">';
+	print $object->getLibType();
+	if ($object->type == 1)
+	{
+		$facreplaced=new Facture($db);
+		$facreplaced->fetch($object->fk_facture_source);
+		print ' ('.$langs->transnoentities("ReplaceInvoice",$facreplaced->getNomUrl(1)).')';
+	}
+	if ($object->type == 2)
+	{
+		$facusing=new Facture($db);
+		$facusing->fetch($object->fk_facture_source);
+		print ' ('.$langs->transnoentities("CorrectInvoice",$facusing->getNomUrl(1)).')';
+	}
+
+	$facidavoir=$object->getListIdAvoirFromInvoice();
+	if (count($facidavoir) > 0)
+	{
+		print ' ('.$langs->transnoentities("InvoiceHasAvoir");
+		$i=0;
+		foreach($facidavoir as $id)
+		{
+			if ($i==0) print ' ';
+			else print ',';
+			$facavoir=new Facture($db);
+			$facavoir->fetch($id);
+			print $facavoir->getNomUrl(1);
+		}
+		print ')';
+	}
+	// FIXME $facidnext not defined
+	/*
+	if ($facidnext > 0)
+	{
+		$facthatreplace=new Facture($db);
+		$facthatreplace->fetch($facidnext);
+		print ' ('.$langs->transnoentities("ReplacedByInvoice",$facthatreplace->getNomUrl(1)).')';
+	}
+	*/
+	print '</td></tr>';
+
+	// Discounts
+	print '<tr><td>'.$langs->trans('Discounts').'</td><td colspan="5">';
+	if ($object->thirdparty->remise_client) print $langs->trans("CompanyHasRelativeDiscount",$object->thirdparty->remise_client);
+	else print $langs->trans("CompanyHasNoRelativeDiscount");
+	print '. ';
+	if ($absolute_discount > 0)
+	{
+		if ($object->statut > 0 || $object->type == 2 || $object->type == 3)
+		{
+			if ($object->statut == 0)
+			{
+				print $langs->trans("CompanyHasAbsoluteDiscount",price($absolute_discount),$langs->transnoentities("Currency".$conf->currency)).'. ';
+			}
+			else
+			{
+				if ($object->statut < 1 || $object->type == 2 || $object->type == 3)
+				{
+					$text=$langs->trans("CompanyHasAbsoluteDiscount",price($absolute_discount),$langs->transnoentities("Currency".$conf->currency));
+					print '<br>'.$text.'.<br>';
+				}
+				else
+				{
+					$text=$langs->trans("CompanyHasAbsoluteDiscount",price($absolute_discount),$langs->transnoentities("Currency".$conf->currency));
+					$text2=$langs->trans("AbsoluteDiscountUse");
+					print $form->textwithpicto($text,$text2);
+				}
+			}
+		}
+		else
+		{
+			// Remise dispo de type non avoir
+			$filter='fk_facture_source IS NULL';
+			print '<br>';
+			$form->form_remise_dispo($_SERVER["PHP_SELF"].'?id='.$object->id,0,'remise_id',$object->thirdparty->id,$absolute_discount,$filter,$resteapayer);
+		}
+	}
+	if ($absolute_creditnote > 0)
+	{
+		// If validated, we show link "add credit note to payment"
+		if ($object->statut != 1 || $object->type == 2 || $object->type == 3)
+		{
+			if ($object->statut == 0 && $object->type != 3)
+			{
+				$text=$langs->trans("CompanyHasCreditNote",price($absolute_creditnote),$langs->transnoentities("Currency".$conf->currency));
+				print $form->textwithpicto($text,$langs->trans("CreditNoteDepositUse"));
+			}
+			else print $langs->trans("CompanyHasCreditNote",price($absolute_creditnote),$langs->transnoentities("Currency".$conf->currency)).'.';
+		}
+		else
+		{
+			// Remise dispo de type avoir
+			$filter='fk_facture_source IS NOT NULL';
+			if (! $absolute_discount) print '<br>';
+			$form->form_remise_dispo($_SERVER["PHP_SELF"].'?id='.$object->id,0,'remise_id_for_payment',$object->thirdparty->id,$absolute_creditnote,$filter,$resteapayer);
+		}
+	}
+	if (! $absolute_discount && ! $absolute_creditnote) print $langs->trans("CompanyHasNoAbsoluteDiscount").'.';
+	print '</td></tr>';
+
+	// Date invoice
+	print '<tr><td>';
+	print '<table class="nobordernopadding" width="100%"><tr><td>';
+	print $langs->trans('Date');
+	print '</td>';
+	if ($object->type != 2 && $action != 'editinvoicedate' && ! empty($object->brouillon) && $user->rights->facture->creer) print '<td align="right"><a href="'.$_SERVER["PHP_SELF"].'?action=editinvoicedate&amp;id='.$object->id.'">'.img_edit($langs->trans('SetDate'),1).'</a></td>';
+	print '</tr></table>';
+	print '</td><td colspan="3">';
+
+	if ($object->type != 2)
+	{
+		if ($action == 'editinvoicedate')
+		{
+			$form->form_date($_SERVER['PHP_SELF'].'?id='.$object->id,$object->date,'invoicedate');
+		}
+		else
+		{
+			print dol_print_date($object->date,'daytext');
+		}
+	}
+	else
+	{
+		print dol_print_date($object->date,'daytext');
+	}
+	print '</td>';
+	print '</tr>';
+
+	// Date payment term
+	print '<tr><td>';
+	print '<table class="nobordernopadding" width="100%"><tr><td>';
+	print $langs->trans('DateMaxPayment');
+	print '</td>';
+	if ($object->type != 2 && $action != 'editpaymentterm' && ! empty($object->brouillon) && $user->rights->facture->creer) print '<td align="right"><a href="'.$_SERVER["PHP_SELF"].'?action=editpaymentterm&amp;id='.$object->id.'">'.img_edit($langs->trans('SetDate'),1).'</a></td>';
+	print '</tr></table>';
+	print '</td><td colspan="3">';
+	if ($object->type != 2)
+	{
+		if ($action == 'editpaymentterm')
+		{
+			$form->form_date($_SERVER['PHP_SELF'].'?id='.$object->id,$object->date_lim_reglement,'paymentterm');
+		}
+		else
+		{
+			print dol_print_date($object->date_lim_reglement,'daytext');
+			if ($object->date_lim_reglement < ($now - $conf->facture->client->warning_delay) && ! $object->paye && $object->statut == 1 && ! isset($object->am)) print img_warning($langs->trans('Late'));
+		}
+	}
+	else
+	{
+		print '&nbsp;';
+	}
+	print '</td></tr>';
+
+	// Conditions de reglement
+	print '<tr><td>';
+	print '<table class="nobordernopadding" width="100%"><tr><td>';
+	print $langs->trans('PaymentConditionsShort');
+	print '</td>';
+	if ($object->type != 2 && $action != 'editconditions' && ! empty($object->brouillon) && $user->rights->facture->creer) print '<td align="right"><a href="'.$_SERVER["PHP_SELF"].'?action=editconditions&amp;id='.$object->id.'">'.img_edit($langs->trans('SetConditions'),1).'</a></td>';
+	print '</tr></table>';
+	print '</td><td colspan="3">';
+	if ($object->type != 2)
+	{
+		if ($action == 'editconditions')
+		{
+			$form->form_conditions_reglement($_SERVER['PHP_SELF'].'?id='.$object->id,$object->cond_reglement_id,'cond_reglement_id');
+		}
+		else
+		{
+			$form->form_conditions_reglement($_SERVER['PHP_SELF'].'?id='.$object->id,$object->cond_reglement_id,'none');
+		}
+	}
+	else
+	{
+		print '&nbsp;';
+	}
+	print '</td></tr>';
+
+	// Mode de reglement
+	print '<tr><td>';
+	print '<table class="nobordernopadding" width="100%"><tr><td>';
+	print $langs->trans('PaymentMode');
+	print '</td>';
+	if ($action != 'editmode' && ! empty($object->brouillon) && $user->rights->facture->creer) print '<td align="right"><a href="'.$_SERVER["PHP_SELF"].'?action=editmode&amp;id='.$object->id.'">'.img_edit($langs->trans('SetMode'),1).'</a></td>';
+	print '</tr></table>';
+	print '</td><td colspan="3">';
+	if ($action == 'editmode')
+	{
+		$form->form_modes_reglement($_SERVER['PHP_SELF'].'?id='.$object->id,$object->mode_reglement_id,'mode_reglement_id');
+	}
+	else
+	{
+		$form->form_modes_reglement($_SERVER['PHP_SELF'].'?id='.$object->id,$object->mode_reglement_id,'none');
+	}
+	print '</td></tr>';
+
+	// Montants
+	print '<tr><td>'.$langs->trans('AmountHT').'</td>';
+	print '<td align="right" colspan="2" nowrap>'.price($object->total_ht).'</td>';
+	print '<td>'.$langs->trans('Currency'.$conf->currency).'</td></tr>';
+	print '<tr><td>'.$langs->trans('AmountVAT').'</td><td align="right" colspan="2" nowrap>'.price($object->total_tva).'</td>';
+	print '<td>'.$langs->trans('Currency'.$conf->currency).'</td></tr>';
+
+	// Amount Local Taxes
+	if ($mysoc->country_code=='ES')
+	{
+		if ($mysoc->localtax1_assuj=="1") //Localtax1 RE
+		{
+			print '<tr><td>'.$langs->transcountry("AmountLT1",$mysoc->country_code).'</td>';
+			print '<td align="right" colspan="2" nowrap>'.price($object->total_localtax1).'</td>';
+			print '<td>'.$langs->trans("Currency".$conf->currency).'</td></tr>';
+		}
+		if ($mysoc->localtax2_assuj=="1") //Localtax2 IRPF
+		{
+			print '<tr><td>'.$langs->transcountry("AmountLT2",$mysoc->country_code).'</td>';
+			print '<td align="right" colspan="2" nowrap>'.price($object->total_localtax2).'</td>';
+			print '<td>'.$langs->trans("Currency".$conf->currency).'</td></tr>';
+		}
+	}
+
+	print '<tr><td>'.$langs->trans('AmountTTC').'</td><td align="right" colspan="2" nowrap>'.price($object->total_ttc).'</td>';
+	print '<td>'.$langs->trans('Currency'.$conf->currency).'</td></tr>';
+
+	// Statut
+	print '<tr><td>'.$langs->trans('Status').'</td>';
+	print '<td align="left" colspan="3">'.($object->getLibStatut(4,$totalpaye)).'</td></tr>';
+
+	print '<tr><td>'.$langs->trans("RIB").'</td><td colspan="5">';
+	print $object->thirdparty->display_rib();
+	print '</td></tr>';
+
+	print '</table>';
+
+	dol_fiche_end();
+
+
+
+	/*
+	 * Withdrawal request
+	*/
+
+	$sql = "SELECT pfd.rowid, pfd.traite, pfd.date_demande as date_demande";
+	$sql .= " , pfd.date_traite as date_traite";
+	$sql .= " , pfd.amount";
+	$sql .= " , u.rowid as user_id, u.name, u.firstname, u.login";
+	$sql .= " FROM ".MAIN_DB_PREFIX."prelevement_facture_demande as pfd";
+	$sql .= " , ".MAIN_DB_PREFIX."user as u";
+	$sql .= " WHERE fk_facture = ".$object->id;
+	$sql .= " AND pfd.fk_user_demande = u.rowid";
+	$sql .= " AND pfd.traite = 0";
+	$sql .= " ORDER BY pfd.date_demande DESC";
+
+	$result_sql = $db->query($sql);
+	if ($result_sql)
+	{
+		$num = $db->num_rows($result_sql);
+	}
+
+
+	/*
+	 * Buttons
+	*/
+	print "\n<div class=\"tabsAction\">\n";
+
+	// Add a withdraw request
+	if ($object->statut > 0 && $object->paye == 0 && $num == 0)
+	{
+		if ($user->rights->prelevement->bons->creer)
+		{
+			print '<a class="butAction" href="'.$_SERVER['PHP_SELF'].'?id='.$object->id.'&amp;action=new">'.$langs->trans("MakeWithdrawRequest").'</a>';
+		}
+		else
+		{
+			print '<a class="butActionRefused" href="#">'.$langs->trans("MakeWithdrawRequest").'</a>';
+		}
+	}
+
+	print "</div><br>\n";
+
+
+	print $langs->trans("DoStandingOrdersBeforePayments").'<br>';
+
+
+	/*
+	 * Withdrawals
+	*/
+	print '<table class="noborder" width="100%">';
+
+	print '<tr class="liste_titre">';
+	print '<td align="left">'.$langs->trans("DateRequest").'</td>';
+	print '<td align="center">'.$langs->trans("DateProcess").'</td>';
+	print '<td align="center">'.$langs->trans("Amount").'</td>';
+	print '<td align="center">'.$langs->trans("WithdrawalReceipt").'</td>';
+	print '<td align="center">'.$langs->trans("User").'</td><td>&nbsp;</td><td>&nbsp;</td>';
+	print '</tr>';
+	$var=True;
+
+	if ($result_sql)
+	{
+		$i = 0;
+
+		while ($i < $num)
+		{
+			$obj = $db->fetch_object($result_sql);
+			$var=!$var;
+
+			print "<tr ".$bc[$var].">";
+			print '<td align="left">'.dol_print_date($db->jdate($obj->date_demande),'day')."</td>\n";
+			print '<td align="center">'.$langs->trans("OrderWaiting").'</td>';
+			print '<td align="center">'.price($obj->amount).'</td>';
+			print '<td align="center">-</td>';
+			print '<td align="center"><a href="'.DOL_URL_ROOT.'/user/fiche.php?id='.$obj->user_id.'">'.img_object($langs->trans("ShowUser"),'user').' '.$obj->login.'</a></td>';
+			print '<td>&nbsp;</td>';
+			print '<td>';
+			print '<a href="'.$_SERVER['PHP_SELF'].'?id='.$object->id.'&amp;action=delete&amp;did='.$obj->rowid.'">';
+			print img_delete();
+			print '</a></td>';
+			print "</tr>\n";
+			$i++;
+		}
+
+		$db->free($result_sql);
+	}
+	else
+	{
+		dol_print_error($db);
+	}
+
+	$sql = "SELECT pfd.rowid, pfd.traite, pfd.date_demande,";
+	$sql.= " pfd.date_traite, pfd.fk_prelevement_bons, pfd.amount,";
+	$sql.= " pb.ref,";
+	$sql.= " u.rowid as user_id, u.name, u.firstname, u.login";
+	$sql.= " FROM ".MAIN_DB_PREFIX."prelevement_facture_demande as pfd,";
+	$sql.= " ".MAIN_DB_PREFIX."prelevement_bons as pb,";
+	$sql.= " ".MAIN_DB_PREFIX."user as u";
+	$sql.= " WHERE fk_facture = ".$object->id;
+	$sql.= " AND pfd.fk_user_demande = u.rowid";
+	$sql.= " AND pb.rowid = pfd.fk_prelevement_bons";
+	$sql.= " AND pfd.traite = 1";
+	$sql.= " ORDER BY pfd.date_demande DESC";
+
+	$result = $db->query($sql);
+	if ($result)
+	{
+		$num = $db->num_rows($result);
+		$i = 0;
+
+		while ($i < $num)
+		{
+			$obj = $db->fetch_object($result);
+			$var=!$var;
+
+			print "<tr $bc[$var]>";
+
+			print '<td align="left">'.dol_print_date($db->jdate($obj->date_demande),'day')."</td>\n";
+
+			print '<td align="center">'.dol_print_date($db->jdate($obj->date_traite),'day')."</td>\n";
+
+			print '<td align="center">'.price($obj->amount).'</td>';
+
+			print '<td align="center">';
+			$withdrawreceipt=new BonPrelevement($db);
+			$withdrawreceipt->id=$obj->fk_prelevement_bons;
+			$withdrawreceipt->ref=$obj->ref;
+			print $withdrawreceipt->getNomUrl(1);
+			print "</td>\n";
+
+			print '<td align="center"><a href="'.DOL_URL_ROOT.'/user/fiche.php?id='.$obj->user_id.'">'.img_object($langs->trans("ShowUser"),'user').' '.$obj->login.'</a></td>';
+
+			print '<td>&nbsp;</td>';
+			print '<td>&nbsp;</td>';
+
+			print "</tr>\n";
+			$i++;
+		}
+
+		$db->free($result);
+	}
+	else
+	{
+		dol_print_error($db);
+	}
+
+	print "</table>";
 }
 
 
-$db->close();
-
 llxFooter();
+$db->close();
 ?>
diff --git a/htdocs/compta/prelevement/class/bonprelevement.class.php b/htdocs/compta/prelevement/class/bonprelevement.class.php
index 9bef9a46617..b58e072d613 100644
--- a/htdocs/compta/prelevement/class/bonprelevement.class.php
+++ b/htdocs/compta/prelevement/class/bonprelevement.class.php
@@ -1,6 +1,6 @@
 <?php
 /* Copyright (C) 2004-2005 Rodolphe Quiedeville <rodolphe@quiedeville.org>
- * Copyright (C) 2005-2010 Regis Houssin        <regis@dolibarr.fr>
+ * Copyright (C) 2005-2012 Regis Houssin        <regis@dolibarr.fr>
  * Copyright (C) 2010-2012 Juanjo Menent        <jmenent@2byte.es>
  * Copyright (C) 2010-2012 Laurent Destailleur  <eldy@users.sourceforge.net>
  *
@@ -28,7 +28,9 @@ require_once(DOL_DOCUMENT_ROOT."/core/class/commonobject.class.php");
 require_once(DOL_DOCUMENT_ROOT."/compta/facture/class/facture.class.php");
 require_once(DOL_DOCUMENT_ROOT."/societe/class/societe.class.php");
 require_once(DOL_DOCUMENT_ROOT.'/compta/paiement/class/paiement.class.php');
-if ($conf->esaeb->enabled) dol_include_once('/esaeb/class/esaeb19.class.php');
+// FIXME don't include external module class
+if (! empty($conf->esaeb->enabled))
+	dol_include_once('/esaeb/class/esaeb19.class.php');
 
 
 /**
diff --git a/htdocs/compta/prelevement/facturesrejets.php b/htdocs/compta/prelevement/facturesrejets.php
index 1266c1eee69..41675d1c1ec 100644
--- a/htdocs/compta/prelevement/facturesrejets.php
+++ b/htdocs/compta/prelevement/facturesrejets.php
@@ -17,10 +17,10 @@
  *
  */
 
-/**
- * 		\file       htdocs/compta/prelevement/facturesrejets.php
- *      \ingroup    prelevement
- *		\brief      Invoice reject
+/**
+ * 		\file       htdocs/compta/prelevement/facturesrejets.php
+ *      \ingroup    prelevement
+ *		\brief      Invoice reject
  */
 
 require("../bank/pre.inc.php");
diff --git a/htdocs/fichinter/list.php b/htdocs/fichinter/list.php
index a0e2597f0d7..dfced7618f5 100755
--- a/htdocs/fichinter/list.php
+++ b/htdocs/fichinter/list.php
@@ -1,8 +1,8 @@
 <?php
-/* Copyright (C) 2002-2003 Rodolphe Quiedeville <rodolphe@quiedeville.org>
- * Copyright (C) 2004-2011 Laurent Destailleur  <eldy@users.sourceforge.net>
- * Copyright (C) 2005-2009 Regis Houssin        <regis@dolibarr.fr>
- * Copyright (C) 2011-2012 Juanjo Menent        <jmenent@2byte.es>
+/* Copyright (C) 2002-2003	Rodolphe Quiedeville	<rodolphe@quiedeville.org>
+ * Copyright (C) 2004-2011	Laurent Destailleur		<eldy@users.sourceforge.net>
+ * Copyright (C) 2005-2012	Regis Houssin			<regis@dolibarr.fr>
+ * Copyright (C) 2011-2012	Juanjo Menent			<jmenent@2byte.es>
  *
  * 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
@@ -73,18 +73,21 @@ llxHeader();
 $sql = "SELECT";
 $sql.= " f.ref, f.rowid as fichid, f.fk_statut, f.description,";
 $sql.= " fd.description as descriptiondetail, fd.date as dp, fd.duree,";
-$sql.= " s.nom, s.rowid as socid";
+$sql.= " s.nom, s.rowid as socid, s.client";
 $sql.= " FROM (".MAIN_DB_PREFIX."societe as s";
-if (!$user->rights->societe->client->voir && !$socid) $sql.= ", ".MAIN_DB_PREFIX."societe_commerciaux as sc";
+if (! $user->rights->societe->client->voir && empty($socid))
+	$sql.= ", ".MAIN_DB_PREFIX."societe_commerciaux as sc";
 $sql.= ", ".MAIN_DB_PREFIX."fichinter as f)";
 $sql.= " LEFT JOIN ".MAIN_DB_PREFIX."fichinterdet as fd ON fd.fk_fichinter = f.rowid";
 $sql.= " WHERE f.fk_soc = s.rowid ";
 $sql.= " AND f.entity = ".$conf->entity;
-if ($search_ref)     $sql .= " AND f.ref like '%".$db->escape($search_ref)."%'";
-if ($search_company) $sql .= " AND s.nom like '%".$db->escape($search_company)."%'";
-if ($search_desc)    $sql .= " AND (f.description like '%".$db->escape($search_desc)."%' OR fd.description like '%".$db->escape($search_desc)."%')";
-if (!$user->rights->societe->client->voir && !$socid) $sql .= " AND s.rowid = sc.fk_soc AND sc.fk_user = " .$user->id;
-if ($socid)	$sql.= " AND s.rowid = " . $socid;
+if ($search_ref)     $sql .= " AND f.ref LIKE '%".$db->escape($search_ref)."%'";
+if ($search_company) $sql .= " AND s.nom LIKE '%".$db->escape($search_company)."%'";
+if ($search_desc)    $sql .= " AND (f.description LIKE '%".$db->escape($search_desc)."%' OR fd.description LIKE '%".$db->escape($search_desc)."%')";
+if (! $user->rights->societe->client->voir && empty($socid))
+	$sql .= " AND s.rowid = sc.fk_soc AND sc.fk_user = " .$user->id;
+if ($socid)
+	$sql.= " AND s.rowid = " . $socid;
 $sql.= " ORDER BY ".$sortfield." ".$sortorder;
 $sql.= $db->plimit($limit+1, $offset);
 
@@ -96,12 +99,12 @@ if ($result)
 	$interventionstatic=new Fichinter($db);
 
 	$urlparam="&amp;socid=$socid";
-	print_barre_liste($langs->trans("ListOfInterventions"), $page, "list.php",$urlparam,$sortfield,$sortorder,'',$num);
+	print_barre_liste($langs->trans("ListOfInterventions"), $page, $_SERVER['PHP_SELF'], $urlparam, $sortfield, $sortorder, '', $num);
 
 	print '<form method="get" action="'.$_SERVER["PHP_SELF"].'">'."\n";
 	print '<table class="noborder" width="100%">';
 
-	print "<tr class=\"liste_titre\">";
+	print '<tr class="liste_titre">';
 	print_liste_field_titre($langs->trans("Ref"),$_SERVER["PHP_SELF"],"f.ref","",$urlparam,'width="15%"',$sortfield,$sortorder);
 	print_liste_field_titre($langs->trans("Company"),$_SERVER["PHP_SELF"],"s.nom","",$urlparam,'',$sortfield,$sortorder);
 	print_liste_field_titre($langs->trans("Description"),$_SERVER["PHP_SELF"],"f.description","",$urlparam,'',$sortfield,$sortorder);
-- 
GitLab