Jump to content

Points de fidélité -> doublons


Recommended Posts

Bonjour à tous, juste un petit post pour une petite modif que j'ai faite au niveau du suivi des points de fidélité pour la boutique que je monte pour ma femme. Ma femme trouvait bizarre que l'on aie l'historique complet (En cours de validation, disponibles, convertis) au lieu d'avoir juste le dernier élément le plus récent pour chaque commande.

Etant donné que, par chance, les clés numérique sont en ordre croissant et correspondent à l'ordre logique des choses (validation = 1, dispo = 2 etc...), voici un petit hack qui n'affichera que le statut le plus récent pour chaque commande:

Dans /modules/loyalty/LoyaltyModule.php remplacez la fonction getAllByIdCustomer (ligne 143) par ceci:

static public function getAllByIdCustomer($id_customer, $id_lang, $onlyValidate=false)
   {
       $query = '
           SELECT f.id_order AS id, fh.date_add AS date, (o.total_paid - o.total_shipping) AS total_without_shipping, fh.points AS points, fh.id_loyalty AS id_loyalty, fh.id_loyalty_state AS id_loyalty_state, fsl.name AS state
           FROM `'._DB_PREFIX_.'loyalty_history` fh
           LEFT JOIN `'._DB_PREFIX_.'loyalty` f ON (f.id_loyalty = fh.id_loyalty)
           LEFT JOIN `'._DB_PREFIX_.'orders` o ON (f.id_order = o.id_order)
           LEFT JOIN `'._DB_PREFIX_.'loyalty_state_lang` fsl ON (fh.id_loyalty_state = fsl.id_loyalty_state AND fsl.id_lang = '.intval($id_lang).')
           WHERE f.id_customer = '.intval($id_customer);
       if ($onlyValidate===true)
           $query.= ' AND f.id_loyalty_state = '.intval(LoyaltyStateModule::getValidationId()).' GROUP BY f.id_loyalty';

           $rows = Db::getInstance()->ExecuteS($query);
           $_rows = array();

           foreach ($rows as $r) 
           {
               if ( array_key_exists($r['id'], $_rows) )
               {
                   if ( intval($_rows[$r['id']]['id_loyalty_state']) < intval($r['id_loyalty_state']) ) $_rows[$r['id']] = $r;
               }
               else 
               {
                   $_rows[$r['id']] = $r;
               }
           }

       return $_rows;
   }

Share this post


Link to post
Share on other sites

Hmmm.. tout compte fait il est plus logique de le faire directement sur la date, au cas ou l'ordre des clés ne corresponde justement plus à l'ordre logique des choses.

Remplacer

if ( intval($_rows[$r['id']]['id_loyalty_state']) < intval($r['id_loyalty_state']) ) $_rows[$r['id']] = $r;



par

if ( strtotime($_rows[$r['id']]['date']) < strtotime($r['date']) ) $_rows[$r['id']] = $r;



Je viens également de me rendre compte que je suis dans le forum graphisme 8-/ ... j'avais trouvé une thread à partir de Google sur les points de fidélité et ne m'en était pas rendu compte quand j'ai fait mon nouveau post. Désolé... et merci aux modérateurs de déplacer dans la catégorie développement ou là ou cela est approprié :)

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

×
×
  • Create New...

Important Information

Cookies ensure the smooth running of our services. Using these, you accept the use of cookies. Learn More