dolibarr-dev
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Dolibarr-dev] Patch compatibilité Mysql 2.3


From: Raphaël Bertrand (Résultic)
Subject: [Dolibarr-dev] Patch compatibilité Mysql 2.3
Date: Fri, 20 Jun 2008 15:23:39 +0200
User-agent: Thunderbird 2.0.0.14 (Windows/20080421)

Bonjour,

Voici un patch remplaçant les 3 requêtes comportant encore du UNION par du code php équivalent, afin de les rendre compatible avec Mysql 2.3.

--
*Raphaël Bertrand*
Résultic - Management & Informatique
Siège : 11 rue Tronchet - 69006 LYON
Bureaux : 11 pl Maréchal Lyautey - 69006 LYON
Fixe. 08 74 77 00 70
Fax. 08 25 24 85 02
E-Mail : address@hidden
Index: comm/remx.php
===================================================================
RCS file: /sources/dolibarr/dolibarr/htdocs/comm/remx.php,v
retrieving revision 1.24
diff -u -r1.24 remx.php
--- comm/remx.php       29 Jan 2008 19:03:29 -0000      1.24
+++ comm/remx.php       20 Jun 2008 13:19:13 -0000
@@ -1,6 +1,7 @@
 <?PHP
 /* Copyright (C) 2001-2004 Rodolphe Quiedeville <address@hidden>
  * Copyright (C) 2004-2007 Laurent Destailleur  <address@hidden>
+ * Copyright (C) 2008 Raphael Bertrand (Resultic)   <address@hidden>
  *
  * 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
@@ -249,7 +250,7 @@
      * Liste ristournes appliquées (=liees a une ligne de facture ou facture)
      */
     // Remises liees a lignes de factures
-    $sql = "(SELECT rc.rowid, rc.amount_ht, rc.amount_tva, rc.amount_ttc, 
rc.tva_tx,";
+    $sql = "SELECT rc.rowid, rc.amount_ht, rc.amount_tva, rc.amount_ttc, 
rc.tva_tx,";
        $sql.= $db->pdate("rc.datec")." as dc, rc.description, 
rc.fk_facture_line, rc.fk_facture,";
     $sql.= " rc.fk_facture_source,";
        $sql.= " u.login, u.rowid as user_id,";
@@ -263,28 +264,31 @@
     $sql.= " WHERE rc.fk_soc =". $objsoc->id;
     $sql.= " AND rc.fk_facture_line = fc.rowid";
     $sql.= " AND fc.fk_facture = f.rowid";
-    $sql.= " AND rc.fk_user = u.rowid)";
-       $sql.= " UNION ";
+    $sql.= " AND rc.fk_user = u.rowid";
+       $sql.= " ORDER BY dc DESC";
+       //$sql.= " UNION ";
     // Remises liees a factures
-       $sql.= "(SELECT rc.rowid, rc.amount_ht, rc.amount_tva, rc.amount_ttc, 
rc.tva_tx,";
-       $sql.= $db->pdate("rc.datec")." as dc, rc.description, 
rc.fk_facture_line, rc.fk_facture,";
-    $sql.= " rc.fk_facture_source,";
-       $sql.= " u.login, u.rowid as user_id,";
-    $sql.= " f.rowid, f.facnumber,";
-       $sql.= " fa.facnumber as ref, fa.type as type";
-    $sql.= " FROM ".MAIN_DB_PREFIX."facture as f";
-    $sql.= " , ".MAIN_DB_PREFIX."user as u";
-    $sql.= " , ".MAIN_DB_PREFIX."societe_remise_except as rc";
-    $sql.= " LEFT JOIN ".MAIN_DB_PREFIX."facture as fa ON rc.fk_facture_source 
= fa.rowid";
-    $sql.= " WHERE rc.fk_soc =". $objsoc->id;
-    $sql.= " AND rc.fk_facture = f.rowid";
-    $sql.= " AND rc.fk_user = u.rowid)";
-
-    $sql.= " ORDER BY dc DESC";
+       $sql2= "SELECT rc.rowid, rc.amount_ht, rc.amount_tva, rc.amount_ttc, 
rc.tva_tx,";
+       $sql2.= $db->pdate("rc.datec")." as dc, rc.description, 
rc.fk_facture_line, rc.fk_facture,";
+    $sql2.= " rc.fk_facture_source,";
+       $sql2.= " u.login, u.rowid as user_id,";
+    $sql2.= " f.rowid, f.facnumber,";
+       $sql2.= " fa.facnumber as ref, fa.type as type";
+    $sql2.= " FROM ".MAIN_DB_PREFIX."facture as f";
+    $sql2.= " , ".MAIN_DB_PREFIX."user as u";
+    $sql2.= " , ".MAIN_DB_PREFIX."societe_remise_except as rc";
+    $sql2.= " LEFT JOIN ".MAIN_DB_PREFIX."facture as fa ON 
rc.fk_facture_source = fa.rowid";
+    $sql2.= " WHERE rc.fk_soc =". $objsoc->id;
+    $sql2.= " AND rc.fk_facture = f.rowid";
+    $sql2.= " AND rc.fk_user = u.rowid";
+       
+       $sql2.= " ORDER BY dc DESC";
 
     $resql=$db->query($sql);
-    if ($resql)
-    {
+       $resql2=null;
+    if ($resql) $resql2=$db->query($sql2);
+       if ($resql2)
+    { 
         print_titre($langs->trans("DiscountAlreadyCounted"));
         print '<table class="noborder" width="100%">';
         print '<tr class="liste_titre"><td 
width="120">'.$langs->trans("Date").'</td>';
@@ -298,11 +302,32 @@
         print '</tr>';
 
         $var = true;
-        $i = 0 ;
+               $tab_sqlobj=array();
+               $tab_sqlobjOrder=array();
         $num = $db->num_rows($resql);
+               for ($i = 0;$i < $num;$i++)
+                       {
+                       $sqlobj = $db->fetch_object($resql);
+                       $tab_sqlobj[] = $sqlobj;
+                       $tab_sqlobjOrder[]=$sqlobj->dc;
+                       }
+               $db->free($resql);      
+               
+               $num = $db->num_rows($resql2);
+               for ($i = 0;$i < $num;$i++)
+                       {
+                       $sqlobj = $db->fetch_object($resql2);
+                       $tab_sqlobj[] = $sqlobj;
+                       $tab_sqlobjOrder[]= $sqlobj->dc;
+                       }
+               $db->free($resql2);
+               array_multisort ($tab_sqlobjOrder,SORT_DESC,$tab_sqlobj);
+               
+               $num = sizeOf($tab_sqlobj);
+               $i = 0 ;
         while ($i < $num )
         {
-            $obj = $db->fetch_object($resql);
+            $obj = array_shift($tab_sqlobj);
             $var = !$var;
             print "<tr $bc[$var]>";
             print '<td>'.dolibarr_print_date($obj->dc,'dayhour').'</td>';
@@ -330,7 +355,6 @@
             print '</tr>';
             $i++;
         }
-        $db->free($resql);
         print "</table>";
     }
     else
@@ -343,4 +367,4 @@
 $db->close();
 
 llxFooter('$Date: 2008/01/29 19:03:29 $ - $Revision: 1.24 $');
-?>
+?>
\ No newline at end of file
Index: compta/bank/treso.php
===================================================================
RCS file: /sources/dolibarr/dolibarr/htdocs/compta/bank/treso.php,v
retrieving revision 1.12
diff -u -r1.12 treso.php
--- compta/bank/treso.php       12 Feb 2008 01:33:44 -0000      1.12
+++ compta/bank/treso.php       20 Jun 2008 13:19:43 -0000
@@ -1,5 +1,6 @@
 <?php
 /* Copytight (C) 2005-2007 Regis Houssin        <address@hidden>
+ * Copyright (C) 2008 Raphael Bertrand (Resultic)   <address@hidden>
  *
  * 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
@@ -150,25 +151,64 @@
        $sql.= " FROM ".MAIN_DB_PREFIX."facture as f";
        $sql.= " LEFT JOIN ".MAIN_DB_PREFIX."societe as s ON f.fk_soc = 
s.rowid";
        $sql.= " WHERE f.paye = 0 AND fk_statut = 1";
-       $sql.= " UNION DISTINCT";
-       $sql.= " SELECT ff.rowid as facid, ff.facnumber, (-1*ff.total_ttc), 
ff.type, ".$db->pdate("ff.date_lim_reglement")." as dlr,";
-       $sql.= " s.rowid as socid, s.nom, s.fournisseur";
-       $sql.= " FROM ".MAIN_DB_PREFIX."facture_fourn as ff";
-       $sql.= " LEFT JOIN ".MAIN_DB_PREFIX."societe as s ON ff.fk_soc = 
s.rowid";
-       $sql.= " WHERE ff.paye = 0 AND fk_statut = 1";
        $sql.= " ORDER BY dlr ASC";
+       //$sql.= " UNION DISTINCT";
+       $sql2= " SELECT ff.rowid as facid, ff.facnumber, (-1*ff.total_ttc), 
ff.type, ".$db->pdate("ff.date_lim_reglement")." as dlr,";
+       $sql2.= " s.rowid as socid, s.nom, s.fournisseur";
+       $sql2.= " FROM ".MAIN_DB_PREFIX."facture_fourn as ff";
+       $sql2.= " LEFT JOIN ".MAIN_DB_PREFIX."societe as s ON ff.fk_soc = 
s.rowid";
+       $sql2.= " WHERE ff.paye = 0 AND fk_statut = 1";
+       $sql2.= " ORDER BY dlr ASC";
+       
 
        $result = $db->query($sql);
-       if ($result)
+       $result2=false;
+       if ($result) 
        {
-               $var=False;
+               $result2=$db->query($sql2);
+       }
+       if ($result2)
+       {
+               $tab_sqlobj=array();
                $num = $db->num_rows($result);
+               for ($i = 0;$i < $num;$i++)
+                       {
+                       $sqlobj = $db->fetch_object($result);
+                       $tab_sqlobj[] = $sqlobj;
+                       $tab_sqlobjOrder[]= $sqlobj->dlr;
+                       }
+               $db->free($result);     
+               
+               $num = $db->num_rows($result2);
+               for ($i = 0;$i < $num;$i++)
+                       {
+                       $sqlobj = $db->fetch_object($result2);
+                       $tab_sqlobj[] = $sqlobj;
+                       $tab_sqlobjOrder[]= $sqlobj->dlr;
+                       }
+               $db->free($result2);
+               array_multisort ($tab_sqlobjOrder,$tab_sqlobj);
+               
+               //Apply distinct filter
+               foreach ($tab_sqlobj as $key=>$value) { 
+                 $tab_sqlobj[$key] = "'" . serialize($value) . "'"; 
+               } 
+               $tab_sqlobj = array_unique($tab_sqlobj); 
+               foreach ($tab_sqlobj as $key=>$value) { 
+                 $tab_sqlobj[$key] = unserialize(trim($value, "'")); 
+               } 
+               
+               $num = sizeOf($tab_sqlobj);
+       
+               $var=False;
+               //$num = $db->num_rows($result);
                $i = 0;
                while ($i < $num)
                {
                        $paiement = '';
                        $var=!$var;
-                       $obj = $db->fetch_object($result);
+                       //$obj = $db->fetch_object($result);
+                       $obj = array_shift($tab_sqlobj);
                        
                        $societestatic->id = $obj->socid;
                        $societestatic->nom = $obj->nom;
@@ -225,7 +265,7 @@
                        print "</tr>";
                        $i++;
                }
-               $db->free($result);
+               //$db->free($result);
        }
        else
        {
Index: compta/propal.php
===================================================================
RCS file: /sources/dolibarr/dolibarr/htdocs/compta/propal.php,v
retrieving revision 1.137
diff -u -r1.137 propal.php
--- compta/propal.php   25 Apr 2008 04:35:01 -0000      1.137
+++ compta/propal.php   20 Jun 2008 13:19:19 -0000
@@ -3,6 +3,7 @@
  * Copyright (C) 2004-2008 Laurent Destailleur  <address@hidden>
  * Copyright (C) 2004      Eric Seigne          <address@hidden>
  * Copyright (C) 2005-2007 Regis Houssin        <address@hidden>
+ * Copyright (C) 2008 Raphael Bertrand (Resultic)   <address@hidden>
  *
  * 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
@@ -466,7 +467,6 @@
     
        if ($propal->statut <> 4 && $user->societe_id == 0)
        {
-
                if ($propal->statut == 2 && $user->rights->facture->creer)
                {
                        print '<a class="butAction" 
href="facture.php?propalid='.$propal->id."&action=create&socid=$socid&viewstatut=$viewstatut&sortfield=$sortfield&$sortorder\">".$langs->trans("BuildBill")."</a>";
@@ -543,18 +543,45 @@
        $sql.= " FROM ".MAIN_DB_PREFIX."facture as f";
        $sql.= ", ".MAIN_DB_PREFIX."fa_pr as fp";
        $sql.= " WHERE fp.fk_facture = f.rowid AND fp.fk_propal = ".$propal->id;
-       $sql.= " UNION ";
+       //$sql.= " UNION ";
        // Cas des factures lier via la commande
-       $sql.= "SELECT f.facnumber, f.total,".$db->pdate("f.datef")." as df, 
f.rowid as facid, f.fk_user_author, f.fk_statut, f.paye";
-       $sql.= " FROM ".MAIN_DB_PREFIX."facture as f";
-       $sql.= ", ".MAIN_DB_PREFIX."co_pr as cp, ".MAIN_DB_PREFIX."co_fa as cf";
-       $sql.= " WHERE cp.fk_propale = ".$propal->id." AND cf.fk_commande = 
cp.fk_commande AND cf.fk_facture = f.rowid";
+       $sql2= "SELECT f.facnumber, f.total,".$db->pdate("f.datef")." as df, 
f.rowid as facid, f.fk_user_author, f.fk_statut, f.paye";
+       $sql2.= " FROM ".MAIN_DB_PREFIX."facture as f";
+       $sql2.= ", ".MAIN_DB_PREFIX."co_pr as cp, ".MAIN_DB_PREFIX."co_fa as 
cf";
+       $sql2.= " WHERE cp.fk_propale = ".$propal->id." AND cf.fk_commande = 
cp.fk_commande AND cf.fk_facture = f.rowid";
 
        dolibarr_syslog("propal.php::liste factures sql=".$sql);
-       $resql = $db->query($sql);
-       if ($resql)
+    $resql=$db->query($sql);
+       $resql2=null;
+    if ($resql) 
+               {
+                       dolibarr_syslog("propal.php::liste factures 
sql2=".$sql2);
+                       $resql2=$db->query($sql2);
+               }
+       if ($resql2)
     {
-               $num_fac_asso = $db->num_rows($resql);
+               $tab_sqlobj=array();
+        $num_fac_asso = $db->num_rows($resql);
+               for ($i = 0;$i < $num_fac_asso;$i++)
+                       {
+                       $sqlobj = $db->fetch_object($resql);
+                       $tab_sqlobj[] = $sqlobj;
+                       //$tab_sqlobjOrder[]= $sqlobj->dc;
+                       }
+               $db->free($resql);      
+               
+               $num_fac_asso = $db->num_rows($resql2);
+               for ($i = 0;$i < $num_fac_asso;$i++)
+                       {
+                       $sqlobj = $db->fetch_object($resql2);
+                       $tab_sqlobj[] = $sqlobj;
+                       //$tab_sqlobjOrder[]= $sqlobj->dc;
+                       }
+               $db->free($resql2);
+               //array_multisort ($tab_sqlobjOrder,$tab_sqlobj);
+               
+               $num_fac_asso = sizeOf($tab_sqlobj);
+               //$num_fac_asso = $db->num_rows($resql);
                $i = 0; $total = 0;
                if ($somethingshown) { print '<br>'; $somethingshown=1; }
                if ($num_fac_asso > 1) 
print_titre($langs->trans("RelatedBills"));
@@ -573,7 +600,8 @@
                $var=True;
                while ($i < $num_fac_asso)
                {
-                       $objp = $db->fetch_object($resql);
+                       //$objp = $db->fetch_object($resql);
+                       $objp = array_shift($tab_sqlobj);
                        $var=!$var;
                        print "<tr $bc[$var]>";
                        print '<td><a 
href="../compta/facture.php?facid='.$objp->facid.'">'.img_object($langs->trans("ShowBill"),"bill").'
 '.$objp->facnumber.'</a></td>';
@@ -588,7 +616,7 @@
                print "<td align=\"right\">".price($total)."</td>";
                print "<td>&nbsp;</td></tr>\n";
                print "</table>";
-               $db->free();
+               //$db->free();
        }
 
 
Index: propal.class.php
===================================================================
RCS file: /sources/dolibarr/dolibarr/htdocs/propal.class.php,v
retrieving revision 1.240
diff -u -r1.240 propal.class.php
--- propal.class.php    1 May 2008 18:35:55 -0000       1.240
+++ propal.class.php    20 Jun 2008 13:19:30 -0000
@@ -5,6 +5,7 @@
  * Copyright (C) 2005      Marc Barilley / Ocebo <address@hidden>
  * Copyright (C) 2005-2007 Regis Houssin         <address@hidden>
  * Copyright (C) 2006      Andre Cianfarani      <address@hidden>
+ * Copyright (C) 2008 Raphael Bertrand (Resultic)   <address@hidden>
  *
  * 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
@@ -1337,27 +1338,56 @@
                $sql.= " FROM ".MAIN_DB_PREFIX."facture as f";
                $sql.= ", ".MAIN_DB_PREFIX."fa_pr as fp";
                $sql.= " WHERE fp.fk_facture = f.rowid AND fp.fk_propal = ".$id;
-               $sql.= " UNION ";
-               // Cas des factures lier via la commande
-               $sql.= "SELECT f.rowid, f.facnumber";
-               $sql.= " FROM ".MAIN_DB_PREFIX."facture as f";
-               $sql.= ", ".MAIN_DB_PREFIX."co_pr as cp, 
".MAIN_DB_PREFIX."co_fa as cf";
-               $sql.= " WHERE cp.fk_propale = ".$id." AND cf.fk_commande = 
cp.fk_commande AND cf.fk_facture = f.rowid";
+               //$sql.= " UNION ";
+               // Cas des factures liees via la commande
+               $sql2= "SELECT f.rowid, f.facnumber";
+               $sql2.= " FROM ".MAIN_DB_PREFIX."facture as f";
+               $sql2.= ", ".MAIN_DB_PREFIX."co_pr as cp, 
".MAIN_DB_PREFIX."co_fa as cf";
+               $sql2.= " WHERE cp.fk_propale = ".$id." AND cf.fk_commande = 
cp.fk_commande AND cf.fk_facture = f.rowid";
 
         //$sql = "SELECT fk_facture FROM ".MAIN_DB_PREFIX."fa_pr as fp";
         //$sql .= " WHERE fk_propal = " . $id;
         dolibarr_syslog("Propal::InvoiceArrayList sql=".$sql);
                $resql=$this->db->query($sql);
-               if ($resql)
+               $resql2=null;
+           if ($resql) 
+               {
+                       dolibarr_syslog("Propal::InvoiceArrayList sql2=".$sql2);
+                       $resql2=$this->db->query($sql2);
+               }
+               if ($resql2)
         {
-            $nump = $this->db->num_rows($resql);
-
+                       $tab_sqlobj=array();
+                       $nump = $this->db->num_rows($resql);
+                       for ($i = 0;$i < $nump;$i++)
+                               {
+                               $sqlobj = $this->db->fetch_object($resql);
+                               $tab_sqlobj[] = $sqlobj;
+                               //$tab_sqlobjOrder[]= $sqlobj->dc;
+                               }
+                       $this->db->free($resql);        
+                                       $nump = $this->db->num_rows($resql2);
+                                       
+                       for ($i = 0;$i < $nump;$i++)
+                               {
+                               $sqlobj = $this->db->fetch_object($resql2);
+                               $tab_sqlobj[] = $sqlobj;
+                               //$tab_sqlobjOrder[]= $sqlobj->dc;
+                               }
+                       $this->db->free($resql2);
+                       //array_multisort ($tab_sqlobjOrder,$tab_sqlobj);
+                       
+            //$nump = $this->db->num_rows($resql);
+                       $nump = sizeOf($tab_sqlobj);
+                       
             if ($nump)
             {
                 $i = 0;
                 while ($i < $nump)
                 {
-                    $obj = $this->db->fetch_object($resql);
+                    //$obj = $this->db->fetch_object($resql);
+                                       $obj = array_shift($tab_sqlobj);
+                                       
                     $ga[$obj->rowid] = $obj->facnumber;
                     $i++;
                 }


reply via email to

[Prev in Thread] Current Thread [Next in Thread]