Jump to content

[RESOLU] 1.6 Attributs indépendant du stock


Skygraphism

Recommended Posts

Bonjour tout le monde! 

Voilà après quelques recherches je n'ai pas trouvé de réponse du coup je m'en réfère à la communauté! 

 

Je suis en train de créer une boutique en ligne pour des véhicules , dans les attributs j'ai les couleurs mais aussi le montage (avec comme option Oui ou Non) . 

Mon interrogation est simple, j'aimerais savoir s'il est possible de rendre indépendant l'attribut montage au niveau des stock (à savoir que je compte utiliser la gestion des stocks avancées) afin d'éviter que les clients ne commande le véhicule sans choisir la couleur au préalable. 

 

Idéalement, il faudrait que l'attribut Montage soit seulement une option, car du coup dans mes attributs j'ai Couleur1-Montage:OUI et Couleur1-Montage:NON ce qui fait que je retrouve cela dans mes stocks.

Seulement si c'est possible, je ne sais pas comment faire.
 

Si quelqu'un a une idée et peut m'aiguiller dans mon soucis je le/la/les remercie d'avance !  

Edited by Skygraphism (see edit history)
Link to comment
Share on other sites

  • 2 months later...

Bonsoir,

 

Mon module devrait répondre à votre problématique, sauf que la vous ne liez plus un attribut au produit mais un autre produit, ce qui répond au final à votre demande de gestion de stock. Lien vers le module (la salade est pour la démonstration de la méthode de fonctionnement uniquement https://www.prestashop.com/forums/topic/394021-module-compose-your-selection/)

 

Cordialement,

Link to comment
Share on other sites

Merci pour votre réponse, néanmoins je cherchais une solution sans devoir passer par un module payant.

Je pense que je vais plutôt opter pour une solution plus simple, à savoir de mettre la somme totale des quantités pour chaque couleur dans les montages et décrémenter les quantités pour les deux options de commandes ensembles à chaque commande (comment je suis en train d'y réfléchir)  . 

Et je vais voir à la place pour rendre obligatoire la sélection de chaque type de déclinaison (couleur + montage ou non). 
Je vais ouvrir un nouveau topic pour ça d'ailleurs pour savoir si quelqu'un à des idées, j'ai beau cherché je vois rien. 

Et pour rester dans le sujet, quelqu'un s'est déjà aventuré à tenter de décrémenter la quantité de plusieurs déclinaison (même non choisies) lors d'une commande? 

Link to comment
Share on other sites

Bon finalement après pas mal de recherche j'ai trouvé le moyen de décrémenter la quantité de plusieurs déclinaisons au passage d'une commande.

Dans le fichier /classes/order/OrderDetail.php dans la fonction checkProductStore (pour moi c'est vers la ligne 439) il faut rajouter une condition qui en fonction de l'id du produit et de l'id de l'attribut du produit va décrémenter un autre attribut de la quantité sélectionnée dans le panier grâce à la fonction :

StockAvailable::updateQuantity($product['id_product'], $product['id_product_attribute'], -(int)$product['cart_quantity']);

Ce qui me donne pour moi : 

/**
* Check the order status
* @param array $product
* @param int $id_order_state
*/
protected function checkProductStock($product, $id_order_state)
{
if ($id_order_state != Configuration::get('PS_OS_CANCELED') && $id_order_state != Configuration::get('PS_OS_ERROR'))
{
$update_quantity = true;
if (!StockAvailable::dependsOnStock($product['id_product']))
$update_quantity = StockAvailable::updateQuantity($product['id_product'], $product['id_product_attribute'], -(int)$product['cart_quantity']);

/* **code rajouté** */
if ($product['id_product']==4)  // on regarde si on est dans le bon produit
{ 
if ($product['id_product_attribute'] == 81 ) $autre=StockAvailable::updateQuantity($product['id_product'], 75, -(int)$product['cart_quantity']); 
if ($product['id_product_attribute'] == 75 ) $autre=StockAvailable::updateQuantity($product['id_product'], 81, -(int)$product['cart_quantity']);
}
/* **** */ 

if ($update_quantity)
$product['stock_quantity'] -= $product['cart_quantity'];


if ($product['stock_quantity'] < 0 && Configuration::get('PS_STOCK_MANAGEMENT'))
$this->outOfStock = true;
Product::updateDefaultAttribute($product['id_product']);
}
}

Bien sûr au préalable il faut récupérer les id des attributs du produit 

Personnellement j'utilise une méthode un peu "brute" on dira , dans le fichier /themes/VOTRE_THEME/js/modules/blockcart/ajax-cart.js vers la ligne 143 (pour moi du moins) vous avez : 

//for product page 'add' button...
$(document).on('click', '#add_to_cart button', function(e){
e.preventDefault();
ajaxCart.add($('#product_page_product_id').val(), $('#idCombination').val(), true, null, $('#quantity_wanted').val(), null);
});

Ajouter alors une alerte affichant $('#idCombination').val() 

ce qui donne : 

 

//for product page 'add' button...
$(document).on('click', '#add_to_cart button', function(e){
e.preventDefault();
alert($('#idCombination').val() ); // LIGNE A RAJOUTER
ajaxCart.add($('#product_page_product_id').val(), $('#idCombination').val(), true, null, $('#quantity_wanted').val(), null);
});

(Pensez à l'enlever après avoir fini ^^) 

 

Voilà en espérant que ça pourra en aider certains ! :) 
Je passe le topic en résolu! et si il y a des questions hésitez pas!

 

Edited by Skygraphism (see edit history)
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...