Author Topic: Contribution retour_produit (beta)  (Read 701 times)

Offline knostra

  • Nouveau venu
  • **
  • Posts: 33
  • Karma: +0/-0
    • View Profile
    • http://artefaxaudio.com
Contribution retour_produit (beta)
« on: July 24, 2009, 10:19:25 am »
Salut à tous,

Je suis en train d'élaborer une contribution de retour produit et je souhaitais vous en faire part pour avoir vos commentaires, critiques et améliorations.

Pour le moment c'est encore une version test que je suis en train d'améliorer, comme part exemple j'ai ajouter une génération de fichier pdf avec le récapitulatif des informations remplie dans le formulaire un numéro de retour est attribué en même temps enfin pas mal de fonctions son en cours de traitement mais je ne suis pas développeur juste un amateur .

voici la première version avec juste le formulaire et une vérification en jquery, il n'y as pas encore le pdf sur cette version j'ai pas encore eu le temps de mettre tous sa au propre et de faire une nouvel version sur le site us mais sa va venir ! :Rofl:

enfin on verra, voici le lien de la contrib sur le site us si des personnes veulent bien tester et me faire un retour ce serais cool:


http://http://addons.oscommerce.com/info/6881

Offline fifimotte

  • phpBB Premier passage
  • *
  • Posts: 1
  • Karma: +0/-0
    • View Profile
Re: Contribution retour_produit (beta)
« Reply #1 on: July 24, 2009, 11:28:08 am »
ok je vais tester

Offline delete

  • Oscteam membre actif
  • ****
  • Posts: 248
  • Karma: +0/-0
    • View Profile
Re: Contribution retour_produit (beta)
« Reply #2 on: July 24, 2009, 11:51:27 am »
Très bonne initiative surtout que RMA Returns system est une bonne contribution mais bien trop lourde à mon sens. du même acabit que Help Desk.

Donc je réitère, c'est un excellent projet, si j'ai un peu de temps dans les semaines qui viennent je n'hésiterai pas à jeter un oeil  ;)

Offline knostra

  • Nouveau venu
  • **
  • Posts: 33
  • Karma: +0/-0
    • View Profile
    • http://artefaxaudio.com
Re: Contribution retour_produit (beta)
« Reply #3 on: July 24, 2009, 12:03:22 pm »
super j'attends ton retour!

j'aurais besoin d'un peu d'aide aussi, pour la sélection du produit j'ai énormément de mal à m'en sortir, comme j'ai dit plus haut je vais mettre le lien retour uniquement dans "mon compte" maintenant pour que ce soit plus simple pour le client je voudrais faire une sélection des produits acheté par le client pour qu'il puisse sélectionné le produit concerné par le retour et c'est la que ça coince je cherche un long et en large pour trouvé une solution mais c'est doublement plus compliqué car il faut le faire à la sauce oscommerce et que ce soit portable aussi  :Rofl:

aller quelqu'un va bien me mettre sur la voix  :Shifty:

Offline knostra

  • Nouveau venu
  • **
  • Posts: 33
  • Karma: +0/-0
    • View Profile
    • http://artefaxaudio.com
Re: Contribution retour_produit (beta)
« Reply #4 on: July 24, 2009, 12:07:30 pm »
merci delete  :Happy:

effectivement on m'avais conseillé RMA Returns system, mais à peine avoir ouvert le zip et lu le readme j'ai compris que c'était une usine à gaz et pas du tout ce que je voulais avoir bien que ce soit une très bonne contrib.

j'ai donc décidé de faire ma contrib mais comme dit je suis un newb mais j'éssaye, en attendant de trouver quelqu'un qui veuille bien me filer un coup de main je vais mettre à jours la version avec les add-ons (générartion d'un fichier pdf, enregistrement dans la base de donnée des informations du formulaire)

@+++

vinicolass

  • Guest
Re: Contribution retour_produit (beta)
« Reply #5 on: July 24, 2009, 03:03:49 pm »
pour avoir mis la contrib RMA sur l'oscload (qui est propulsée par  creloaded 6.2 b2b, ecotax , qtpro et cie)
Je confirme , un système plus simple sera le bienvenue pour la plupart des utilisations.

On fera au mieux pour t'aider a trouver des pistes, tu peux mettre le code ici , tu trouveras de l'aide  :Idea:

Offline knostra

  • Nouveau venu
  • **
  • Posts: 33
  • Karma: +0/-0
    • View Profile
    • http://artefaxaudio.com
Re: Contribution retour_produit (beta)
« Reply #6 on: July 24, 2009, 03:30:48 pm »
Merci vinicolass, je vous donne une version "2" pas encore tout à fais fini d'ailleurs je déconseil de la prendre pour un site en production et d'attendre la version 2 qui seras posté sur le site us c'est juste un lien pour que ceux qui veulent me filer un coup de main puisse voir ou j'en suis

Le pdf est encore à amélioré aussi et bien sur je pensais après avoir réglé tout les petits problème faire une gestion depuis l'admin mais on en est pas encore là  :lol:

bref voila le lien http://http://vds1566.sivit.org/retour_produit_V.2.rar


vous pouvez en faire ce que vous voulez pour l'améliorer à la seule condition d'en faire profiter la communauté !

de mon coté je lâche pas l'affaire je continu mes recherches

je vais juste faire une liste de tout ce qui ne va pas pour que ce soit plus simple pour vous:

- J'ai ajouter un effet jquery.maskedinput-1.2.2.js qui rend assez bien je trouve , par contre j'ai un problème au niveau de la date de réception, quand je rentre la date d'aujourd'hui par exemple j'ai un message d'erreur de validation, alors que si je rentre le 12/06/2009 sa marche !  c'est surement une histoire d'expression régulière au niveau javascript

- le corps du pdf n'est pas très jolie, les infos son bien inscrite mais j'ai pas fais la mise en forme

-dans la nouvel version j'ai mis la contrib directement dans mon compte c'est mieux je pense, mais on peux quand même y accéder même si on est pas loger en tapant le nom du fichier juste après catalog, ce doit être une histoire de restrictions php au niveau des sessions

- la façon dont j'insère les données du formulaire dans la base de données n'est pas du tout conforme à oscommerce

- Je n'ai toujours pas réussi à faire un champ select pour que le client choisisse le produit qu'il veut retourner parmi ceux qu'il à commandé

voila c'est tout je crois, vous allez surement voir ce que je n'ai pas vu.

merci

Offline delete

  • Oscteam membre actif
  • ****
  • Posts: 248
  • Karma: +0/-0
    • View Profile
Re: Contribution retour_produit (beta)
« Reply #7 on: July 24, 2009, 04:27:36 pm »
Quote from: "knostra"
en plus je n'arrive pas à le faire à la façon oscommerce!
La sémantique osCommerce pour les requête en base de données est simple et aide à simplifier le code mysql.

Les fonctions d'abstraction sont, dans ton cas, les suivantes : tep_db_query, tep_db_fetch_array tout simplement.

Le nom des tables sont définis dans includes/database_tables.php
 
Ce qui abouti a un code comme celui-ci :
Code: [Select]
 <tr><td> <select name="select">
      <option value="#" selected>Selection produit</option>
      <?php
       
// ----------------------------------------------------------------------
       // requete pour la recuperation de nos valeurs --------------------------
$requete "SELECT DISTINCT products_reference FROM ' &#46; TABLE_PRODUCTS &#46;  ' ORDER BY products_reference";
$resultat tep_db_query($requete) ; 
       
// ----------------------------------------------------------------------
  
while($select tep_db_fetch_array($resultat))
{
echo '<option value='&#46;$select['products_reference'&#93;&#46;'>'&#46;$select['products_reference'&#93;&#46;'</option>';
}
?>

    </select></td></tr>
[/code]

De mémoire il n'y a pas de champ products_reference dans la table products mais products_model ou products_name. Il doit s'agir d'un champ qui t'est propre.

Si tu dois développer une contribution, je ne peux que t'y encourager, essaye de le faire sur un osCommerce vierge, même toi tu t'y retrouveras mieux pour l'implémentation du code dans de potentielles nouvelles boutiques.

Il peut arriver de penser :
   "Pourquoi vais-je faire profiter de mon développement aux autres".
Et quand tu installes une boutique :
   "Ce fut une bonne idée d'en faire une contrib, j'en ai maintenant le profit"

J'en ai fait l'expérience à plusieurs reprises.

Bon Courage ;)

Offline knostra

  • Nouveau venu
  • **
  • Posts: 33
  • Karma: +0/-0
    • View Profile
    • http://artefaxaudio.com
Re: Contribution retour_produit (beta)
« Reply #8 on: July 25, 2009, 09:13:05 am »
merci delete !

Donc j'ai un peu mieux compris l'insertion dans la base de données façon oscommerce et j'avoue que ça simplifie grandement les choses  :Blink:

je suis passer de sa:

Code: [Select]
require_once('includes/connect_db.php');
   // on écrit la requête sql
   $sql = "INSERT INTO " . $table . "(rma_id, genre, nom, prenom, adresse, codepostal, ville, email, Ntel, Ncmd, dateR, choix, motif) VALUES('', '" . $genre . "','" . $nom . "','" . $prenom . "','" . $adresse . "','" . $codepostal . "','" . $ville . "','" . $email . "','" . $Ntel . "','" . $Ncmd . "','" . $dateR . "','" . $choix . "','" . $motif . "')";
// on insère les informations du formulaire dans la table
    mysql_query($sql) or die('Erreur SQL !'.$sql.'<br>'.mysql_error());
// ***** Insertion dans la base données *****//

à sa:

Code: [Select]
$sql_data_array = array('rma_id' => $rma_id,
                              'genre' => $genre,
                              'nom' => $nom,
                              'prenom' => $prenom,
                              'adresse' => $adresse,
                              'codepostal' => $codepostal,
                              'ville' => $ville,
        'email' => $email,
                              'Ntel' => $Ntel,
                              'Ncmd' => $Ncmd,
                              'dateR' => $dateR,
                              'choix' => $choix,
                              'motif' => $motif);


      tep_db_perform(TABLE_RETOUR_PRODUIT, $sql_data_array);

c'est quand même beaucoup plus simple bien sur il faut créer la define dans database_table comme me la souligné delete

bon maintenant je vais me penché sur le select @+++

Offline knostra

  • Nouveau venu
  • **
  • Posts: 33
  • Karma: +0/-0
    • View Profile
    • http://artefaxaudio.com
Re: Contribution retour_produit (beta)
« Reply #9 on: July 26, 2009, 12:11:37 pm »
salut,

Je viens vous demander un peu d'aide parce que je suis en train de  :Confused:

voyez-vous ou ce trouve mon erreur?

voici la liste pour les commandes, ce code fonctionne:
Code: [Select]
$orders_array = array();
$orders_array[] = array('id'=>'', 'text'=>'Selectionner une commande');
$orders_query = tep_db_query("select orders_id from " . TABLE_ORDERS . " where customers_id = '" . (int)$customer_id . "'");
while ($orders_values = tep_db_fetch_array($orders_query)) {
$orders_array[] = array('id' => $orders_values['orders_id'], 'text' => $orders_values['orders_id']);
}
sort($orders_array);
if($orders_array && count($orders_array) > 0){
?>          
<tr>
<td class="main">selectionnez une commande</td>
<td class="main"><?php echo tep_draw_pull_down_menu('orders_id'$orders_array''); ?></td>
</tr>
<?php

?>
 


et celle là c'est pour les produits, j'ai bien la liste déroulante mais qui ne me renvoie rien:

Code: [Select]
</tr>
$products_array = array();
$products_array[] = array('id'=>'', 'text'=>'Selectionner un produit');
$products_query = tep_db_query("select customers_id from " . TABLE_ORDERS . " where orders_id = '". (int)$HTTP_GET_VARS['order_id'] . "'");
while ($products_values = tep_db_fetch_array($products_query)) {
$products_array[] = array('id' => $products_values['products_name'], 'text' => $products_values['products_name']);
}
sort($products_array);
if($products_array && count($products_array) > 0){
?>          
<tr>
<td class="main">selectionnez un produit</td>
<td class="main"><?php echo tep_draw_pull_down_menu('products_name'$products_array''); ?></td>
</tr>
<?php

?>
   

je crois que ça ne fonctionne pas à cause de la requête que je fais pour afficher seulement le nom des produits que le client à acheté  :Duhuh:

Offline delete

  • Oscteam membre actif
  • ****
  • Posts: 248
  • Karma: +0/-0
    • View Profile
Re: Contribution retour_produit (beta)
« Reply #10 on: July 26, 2009, 03:49:10 pm »
Code: [Select]
              $products_query = tep_db_query("select customers_id from " . TABLE_ORDERS . " where orders_id = '". (int)$HTTP_GET_VARS['order_id'] . "'");L'erreur est flagrante, fait un select * et ensuite affine avec un select champ_de_ta_table, car dans ton cas la requête ne retourne que le customers_id.
 
Bon Code ;)

Edit : Oup's il faut une liaison ou une requête avec la table orders_products pour avoir la liste des produits ...

Offline knostra

  • Nouveau venu
  • **
  • Posts: 33
  • Karma: +0/-0
    • View Profile
    • http://artefaxaudio.com
Re: Contribution retour_produit (beta)
« Reply #11 on: July 26, 2009, 03:57:10 pm »
merci delete,

en faite j'ai réussi a faire ce que je voulais par contre c'est loin d'être à la mode oscommerce

voila comment j'ai procédé pour affiché une liste déroulante avec les numéro de commande qui une fois sélectionné renvoie les articles de cette commande

En php:

Code: [Select]
<h1>test liste liée</h1>

<?php //require('includes/application_top&#46;php');?>

<form method="post">
 <select name="orders" id="orders"
 size=3
 onchange='appel();'>
   <?php   
   $connexion
=mysql_connect("localhost","user","pass");
   
$dbnom="Ma_table";
   
$db=mysql_select_db($dbnom,$connexion);
   
//==========================================
   //== on affiche dans un select la TABLE 1 ==
   //==========================================
   
$res=mysql_query("SELECT * FROM orders",$connexion);
   
$max=@mysql_num_rows($res);
   for (
$nb=0;$nb<$max;$nb++)
   {   
$i=mysql_result($res,$nb,"orders_id");
   if ( isset($_POST["orders_id"&#93;) && $_POST["orders_id"&#93;==$i )
$s=' selected';
   else $s='';
   echo '<option'&#46;$s&#46;' value="'&#46;$i&#46;'">'&#46;$i&#46;'</option>';   
   
}   
   
?>

 </select>
   <?php
  if (isset(
$_POST["orders"&#93;)) {
//==========================================
//== on affiche dans un select la TABLE 2 ==
//========================================== 
 ?>
 
 <select name="orders_products" id="orders_products"
 size=3>
 <?php
  
$rch="WHERE orders_id='"&#46;$_POST["orders"&#93;&#46;"'";
  $res=mysql_query("SELECT * FROM orders_products "&#46;$rch,$connexion);
  $max=@mysql_num_rows($res);
  for ($nb=0;$nb<$max;$nb++)
  {  $i=mysql_result($res,$nb,"products_name");
 echo '<option value="'&#46;$i&#46;'">'&#46;$i&#46;'</option>';   
  }   
?>

 </select>
<?php   }
   
mysql_close($connexion);   
   
?>

 <input type="submit" />
   </form>

On peux aussi le faire en ajax (c'est même mieux )pour sa il faut par contre un 2ème fichier:

1er fichier
Code: [Select]
<?php
  $connexion
=mysql_connect("localhost","user","pass");
   
$dbnom="Ma_table";
   
$db=mysql_select_db($dbnom,$connexion);
  
//==========================================
  //== on affiche dans un select la TABLE 1 ==
  //==========================================
  
$res=mysql_query("SELECT * FROM orders",$connexion);
  
$max=@mysql_num_rows($res);
?>

   <script type="text/javascript">
   function xmlhttp()
   {  var x;
 try {  x = new ActiveXObject("Microsoft.XMLHTTP");   }
 catch (e)   {  try {   x = new ActiveXObject("Msxml2.XMLHTTP");   }
catch (e)   {   try {   x = new XMLHttpRequest();   }
catch (e)   {   x=false;   }
}
 }
 return x;
   }
   function appel()
   {   var xml = xmlhttp();
 if(!xml)
{   alert("XmlHttpRequest non supporté");   }
 else   {   xml.onreadystatechange = function()
{   if(xml.readyState==4)
{   var opt=xml.responseText.split("\t");
orders_products.length=0;
for ( var n=1;n<opt.length;n++ )
{   orders_products.length++;
orders_products.options[orders_products.length-1].text=opt[n];
}
}
 }
 xml.open("GET", "Ajax2.php?tbl2="+orders.options[orders.selectedIndex].text, true);
 xml.send(null);
}
   }  
  </script>
  <select   name="orders" id="orders"
size=3
onchange='appel();'><?php
   
for ($nb=0;$nb<$max;$nb++)
   {  
$i=mysql_result($res,$nb,"orders_id");
  echo '<option>'&#46;$i&#46;'</option>';   
}
   
?>
 
 </select>
 <select name="orders_products" id="orders_products"
size=3>  
 </select>
<?php
  mysql_close
($connexion);
?>


2ème fichier:

Code: [Select]
<?php
   header
('Content-type&#58;text/html;charset=ISO-8859-1');
   
$connexion=mysql_connect("localhost","user","pass");
   
$dbnom="Ma_table";
   
$db=mysql_select_db($dbnom,$connexion);
   
$rch="WHERE orders_id='"&#46;$_GET["tbl2"&#93;&#46;"'";
   
$res=mysql_query("SELECT * FROM orders_products "&#46;$rch,$connexion);
   
$max=@mysql_num_rows($res);
$t="";
   for (
$nb=0;$nb<$max;$nb++)
   {  
$i=mysql_result($res,$nb,"products_name");
  $t&#46;="\t"&#46;$i;   
}  
echo $t;
mysql_close($connexion);
?>

Ce code fonctionne assez bien maintenant il me reste à l'arranger façon oscommerce pour que sa soit correct mais je vois vraiment pas comment intégrer le javascript à un tep_draw_pull_down_menu  par exemple :unsure:

En cherchant je vais bien trouver de toute façon mais l'aide est toujours la bienvenue, y'a encore du boulot j'aimerais bien faire une petite gestion coté admin après   :Rofl:

Offline delete

  • Oscteam membre actif
  • ****
  • Posts: 248
  • Karma: +0/-0
    • View Profile
Re: Contribution retour_produit (beta)
« Reply #12 on: July 26, 2009, 06:39:10 pm »
Je ne veux pas critiquer ton travail, ni remettre en question ta bonne volonté comme évoqué ci-dessus, il est plaisant de voir des membres s'impliquer...

Mais une contribution nécessite l'adoption de la sémantique osCommerce, le cas échéant ce n'est plus une contribution mais une "bricolation".

Un doublon de connexion mySQL et un select * from orders feront péter le load de n'importe quel serveur   ;)

Offline knostra

  • Nouveau venu
  • **
  • Posts: 33
  • Karma: +0/-0
    • View Profile
    • http://artefaxaudio.com
Re: Contribution retour_produit (beta)
« Reply #13 on: July 26, 2009, 07:45:59 pm »
Je suis entièrement d'accord avec toi, le souci c'est que j'ai un peu de mal avec les fonction oscommerce

d'ailleurs je viens de faire un essaie pour transformer le code cité plus haut avec les fonctions oscommerce et je me retrouve avec 2 jolie sélecteurs vide  comme j'ai choisi de le faire en ajax je met le code que j'ai retouché au cas ou tu verrais mon erreur.

merci delete

Code: [Select]
<?php
require('includes/application_top&#46;php');
  
//==========================================
  //== on affiche dans un select la TABLE 1 ==
  //==========================================
  
$retour_cmd_query tep_db_query("select orders_id from " &#46; TABLE_ORDERS &#46; " where customers_id = '" &#46; (int)$customer_id &#46; "'");
  
$retour_cmd tep_db_num_rows($retour_cmd_query);
?>

   <script type="text/javascript">
   function xmlhttp()
   {  var x;
      try         {  x = new ActiveXObject("Microsoft.XMLHTTP");   }
      catch (e)   {  try         {   x = new ActiveXObject("Msxml2.XMLHTTP");   }
                     catch (e)   {   try         {   x = new XMLHttpRequest();   }
                                     catch (e)   {   x=false;   }
                                 }
                  }
      return x;
   }
   function appel()
   {   var xml = xmlhttp();
      if(!xml)
             {   alert("XmlHttpRequest non supporté");   }
      else   {   xml.onreadystatechange = function()
                 {   if(xml.readyState==4)
                     {   var opt=xml.responseText.split("\t");
                         orders_products.length=0;
                         for ( var n=1;n<opt.length;n++ )
                         {   orders_products.length++;
                             orders_products.options[orders_products.length-1].text=opt[n];
                         }
                     }
                  }
                  xml.open("GET", "requete_produit.php?liste_produit="+orders.options[orders.selectedIndex].text, true);
                  xml.send(null);
             }
   }      
  </script>
  <select   name="orders" id="orders"
            size=3
            onchange='appel();'><?php
   
for ($nb=0;$nb<$retour_cmd;$nb++)
   {  
$i=mysql_result($retour_cmd_query,$nb,"orders_id");
      echo 
'<option>'&#46;$i&#46;'</option>';   
}
   
?>
 
      </select>
      <select    name="orders_products" id="orders_products"
                 size=3>  
      </select>


2 eme fichier

Code: [Select]
<?php

require('includes/application_top&#46;php');
  
//==========================================
  //== on affiche dans un select la TABLE 2 ==
  //==========================================
  
header('Content-type&#58;text/html;charset=ISO-8859-1');
  
$retour_produit_query tep_db_query("select * from " &#46; TABLE_ORDERS_PRODUCTS &#46; " where orders_id='"&#46;$_GET["liste_produit"&#93;&#46; "'");
  
$retour_produit tep_db_num_rows($retour_produit_query);   
  
$t="";
   for (
$nb=0;$nb<$max;$nb++)
   {  
$i=mysql_result($retour_produit_query,$nb,"products_name");
      
$t&#46;="\t"&#46;$i;   
}  
echo $t;
?>




encore une chose j'ai pas trouvé l'équivalent oscommerce pour mysql_result

j'ai éssayé avec $result comme ceci par exemple:

$i=$result($retour_produit_query,$nb,"products_name");

mais je crois pas que ce soit ça.

Offline delete

  • Oscteam membre actif
  • ****
  • Posts: 248
  • Karma: +0/-0
    • View Profile
Re: Contribution retour_produit (beta)
« Reply #14 on: July 27, 2009, 08:51:12 am »
Tu fais encore ici un mélange entre les fonctions d'abstraction d'osCommerce et celles de mySQL.

Comme je le disais plus haut c'est pourtant simple, extraction de données d'une requête :
Code: [Select]
// Execution d'une requête
//
$query = 'SELECT * from ' . TABLE_MATABLE . ' where mes conditions';
$query_result = tep_db_query($query) ;

// Récupération des éléments d'une requête
//
while( $query_string = tep_db_fetch_array($query_result) )
{
  $tavariable = $query_string['nom_du_champ_dans_la_table'] ;
}
c tout   :Boring: