Jump to content

Choix d'adresses de livraison par défaut


Recommended Posts

Bonjour à tous,

Après maintes recherches sur le forum et sur internet en général je poste donc ce Topic. =)

Problématique :
Je souhaite avoir deux adresses de livraisons par défaut lors de la commande. l'adresse du client et l'enlèvement à l'entrepôt (à mon magasin)

Le client a bel et bien son adresse à lui par défaut (il a même la possibilité d'en créer à volonté et c'est sympa ^^)

ma question :
Peut-on forcer l'apparition de l'adresse de mon entrepôt dans la liste des adresses ?


Merci d'une réponse.

Bonne journée à tous !!

P.S : Ci-joint un petit écran de là où se situe ma question.

24671_qLMEAVsNj2RqpClBc6ZI_t

Link to comment
Share on other sites

Je l'ai fais sur Virtuemart et ça implique quelques modifications dans le code.

- Le plus simple pour toi serait de modifier le terme "mon adresse" par "mon adresse où retrait à l'entrepôt" et à l'étape suivante le client sélectionne la case "l’enlèvement à l’entrepôt" (personnellement je ferais ça).

- Sinon il faut se débrouiller pour que lors de la création d'un compte l'adresse de l'entrepôt soit ajouté pour chaque client.

Après je ne connais pas encore bien Prestashop. Peu-être qu'il est possible de faire ceci plus facilement.

Link to comment
Share on other sites

  • 3 weeks later...

Bon j'ai trouvé une solution mais je suis allé au fin fond de l'enfer pour la trouver...

En gros, si j'ai bien compris, ce que tu veux faire c'est mettre dans ta liste de d'adresses une adresse "entrepot", c'est ça?

Bon ce qu'il faut faire c'est que :

- rajouter les entrepôts dans ta base :
je suis allé dans ma base de donnée j'ai créé à la main une adresse entrepôt (j'en ai créé une bidon dans le backoffice puis je l'ai modifiée) et j'ai mis le champ supplier à 1, (normalement, cette colonne n'est pas fait pour ça mais comme elle ne me servait à rien je l'utilise pour détecter que c'est un entrepôt... système D).

- créer une fonction pour aller chercher les adresses client ET les adresses entrepôts :
dans /classes/Customer.php, je duplique la fonction getAddresses(), je l'appelle getAddressesDelivery() et je la défini ainsi :

   public function getAddressesDelivery($id_lang)
   {
       return Db::getInstance()->ExecuteS('
       SELECT a.*, cl.`name` AS country, s.name AS state
       FROM `'._DB_PREFIX_.'address` a
       LEFT JOIN `'._DB_PREFIX_.'country` c ON (a.`id_country` = c.`id_country`)
       LEFT JOIN `'._DB_PREFIX_.'country_lang` cl ON (c.`id_country` = cl.`id_country`)
       LEFT JOIN `'._DB_PREFIX_.'state` s ON (s.`id_state` = a.`id_state`)
       WHERE (`id_lang` = '.intval($id_lang).' AND `id_customer` = '.intval($this->id).' AND a.`deleted` = 0)
       OR (`id_lang` = '.intval($id_lang).' AND a.`id_supplier`  = 1 AND a.`deleted` = 0)
       ');
   }



- récupérer les adresses de livraison dans un tableau global à part :

Dans /order.php, ligne 280 environ

       /* Getting customer addresses */
       $customerAddresses = $customer->getAddresses(intval($cookie->id_lang));
       $smarty->assign('addresses', $customerAddresses);
       //rajoute ça de là
       $deliveryAddresses = $customer->getAddressesDelivery(intval($cookie->id_lang));
       $smarty->assign('addresses_delivery', $deliveryAddresses);
       //à là



- sauvegarder ce tableau afin qu'il soit accessible dans javascript (pour l'affichage) :
Dans /themes/"MONTHEME"/order-address.tpl, au tout début il y a une petite section javascript, tu rajoute ça :

[removed]
<!--
   var baseDir = '{$base_dir_ssl}';
   var addresses = new Array();
   {foreach from=$addresses key=k item=address}
       addresses[{$address.id_address|intval}] = new Array('{$address.company|addslashes}', '{$address.firstname|addslashes}', '{$address.lastname|addslashes}', '{$address.address1|addslashes}', '{$address.address2|addslashes}', '{$address.postcode|addslashes}', '{$address.city|addslashes}', '{$address.country|addslashes}', '{$address.state|default:''|addslashes}');
   {/foreach}
   /*de là*/
   var addresses_delivery = new Array();
   {foreach from=$addresses_delivery key=k item=address}
       addresses_delivery[{$address.id_address|intval}] = new Array('{$address.company|addslashes}', '{$address.firstname|addslashes}', '{$address.lastname|addslashes}', '{$address.address1|addslashes}', '{$address.address2|addslashes}', '{$address.postcode|addslashes}', '{$address.city|addslashes}', '{$address.country|addslashes}', '{$address.state|default:''|addslashes}');
   {/foreach}    
   /*à de là*/
-->
[removed]

Link to comment
Share on other sites

Ensuite!

- modifier le input (bouton de choix des adresses de livraison) :
Vers la ligne 30 de order-address.tpl, tu dois avoir un dont l'identifiant est id_address_delivery, tu le change en ça


           {foreach from=$addresses_delivery key=k item=address}
id_address_delivery}selected="selected"{/if}>{$address.alias|escape:'htmlall':'UTF-8'}
           {/foreach}




Ensuite et enfin!

- modifier l'affichage pour que l'adresse de livraison change avec le sélection
Si cette opération est mal faite, ça se voit parce que aucune des deux adresses (livraison et facturation) ne s'afficheront.
Dans /themes/"MONTHEME"/js/order-address.js, au début de la fonction updateAddressDisplay() de la ligne 39, tu rajoute un gros if bien bourrin:

if(addressType=="delivery"){
       var idAddress = $('select#id_address_' + addressType + '').val();
       $('ul#address_' + addressType + ' li.address_company').html(addresses_delivery[idAddress][0]);
       if(addresses_delivery[idAddress][0] == '')
           $('ul#address_' + addressType + ' li.address_company').hide();
       else
           $('ul#address_' + addressType + ' li.address_company').show();
       $('ul#address_' + addressType + ' li.address_name').html(addresses_delivery[idAddress][1] + ' ' + addresses_delivery[idAddress][2]);
       $('ul#address_' + addressType + ' li.address_address1').html(addresses_delivery[idAddress][3]);        
       $('ul#address_' + addressType + ' li.address_address2').html(addresses_delivery[idAddress][4]);
       if(addresses_delivery[idAddress][4] == '')
           $('ul#address_' + addressType + ' li.address_address2').hide();
       else
           $('ul#address_' + addressType + ' li.address_address2').show();
       $('ul#address_' + addressType + ' li.address_city').html(addresses_delivery[idAddress][5] + ' ' + addresses_delivery[idAddress][6]);
       $('ul#address_' + addressType + ' li.address_country').html(addresses_delivery[idAddress][7] + (addresses_delivery[idAddress][8] != '' ? ' (' + addresses_delivery[idAddress][8] +')' : ''));
       // change update link
       var link = $('ul#address_' + addressType + ' li.address_update a').attr('href');
       var expression = /id_address=\d+/;
       link = link.replace(expression, 'id_address='+idAddress);
       $('ul#address_' + addressType + ' li.address_update a').attr('href', link);
   }
   else{
       var idAddress = $('select#id_address_' + addressType + '').val();
       $('ul#address_' + addressType + ' li.address_company').html(addresses[idAddress][0]);
       ...



Voilà... pfff regarde moi ce bordel! La croix et la bannière pour changer un truc évident, bref... Bonne chance!

Link to comment
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
×
×
  • Create New...