Jump to content

anteverce

Members
  • Posts

    264
  • Joined

  • Last visited

Everything posted by anteverce

  1. Regarde ou ce module est greffé. Il doit obligatoirement etre sur un hook "confirmationBidule"
  2. Attention car par défaut Prestashop 1.7 est réglé sur "Ne jamais recompiler les fichiers de templates" Mets sur "Recompiler les fichiers de templates s'ils ont été mis à jour" / efface le cache C'est dans Paramètres avancés > Performances Ce pretashop 1.7 est une usine à gaz
  3. Pour ce qui est du "résidus" va dans Apparence > Position et dégreffe le module Produits phare situé sur le hook "displayOrderConfirmation2"
  4. Bonjour, C'est un bug connu (http://forge.prestashop.com/browse/BOOM-3695) Pour corriger, en attendant une mise à jour : Ouvrir src\Adapter\Order\OrderPresenter.php dans la fonction "getProducts(Order $order)" vers la ligne 134 Replacer : if ($cartProduct['id_product_attribute'] === $orderProduct['id_product_attribute']) { Par : if (($cartProduct['id_product'] === $orderProduct['id_product']) && ($cartProduct['id_product_attribute'] === $orderProduct['id_product_attribute'])) {
  5. Oui c'est un bug connu qui devrait être corrigé dans la prochaine version. Voilà ce que j'ai trouvé A garder en post-it quelque part ^^ ******** Bug a suivre ********* Bug on order confirmation page. Same images is displayed. (http://forge.prestashop.com/browse/BOOM-3695) To solve go to src\Adapter\OrderOrderPresenter.php" in function getProducts(Order $order) around line 134 Replace : if ($cartProduct['id_product_attribute'] === $orderProduct['id_product_attribute']) { By : if (($cartProduct['id_product'] === $orderProduct['id_product']) && ($cartProduct['id_product_attribute'] === $orderProduct['id_product_attribute'])) {
  6. Certainement oui. Je l'ai pas sous la main mais ça n'y est pas non plus sur la 1.7.0.0
  7. themes/VOTRETHEME/templates/checkout/_partials/steps/shipping.tpl (C'est des arborescences à rallonge dans Prestashop 1.7 ) Juste apres <div class="order-options"> il doit vous manquez ceci: <div id="delivery"> <label for="delivery_message">{l s='If you would like to add a comment about your order, please write it in the field below.' d='Shop.Theme.Checkout'}</label> <textarea rows="2" cols="120" id="delivery_message" name="delivery_message">{$delivery_message}</textarea> </div>
  8. La fonction "checkQuantities" se situe dans classes/Cart.php as-tu un override sur cette classe Cart.php ? C'est étrange cette affaire ps : A moins que comme tu as fais une mise a jour, as tu supprimé le fichier class_index.php dans le dossier cache ? (Fichier qui se régénère tout seul donc tu peux le supprimer sans problème)
  9. Il vient d'ou ce bout de code ? Si il n'y a pas de surcharge tu ne dois pas avoir ce fichier dans override > controllers > front > OrderController.php
  10. Sans faire de publicité, le module "MigrationPro" fait ça parfaitement bien : https://addons.prestashop.com/fr/migration-donnees-sauvegarde/8934-migrationpro-migration-prestashop-vers-prestashop.html
  11. Si vous êtes sur Presta 1.7 ce n'est plus {$base_dir} mais {$urls.base_url} je crois
  12. Parti sur la piste de "Fabien_ss2i" j'ai modifié la fonction "getContextualValue" du fichier CartRule.php Les règles panier s'appliqueront à tout sauf les produits en promo. J'ai commenté le code pour s'y retrouver ^^ PS : je suis sur Prestashop 1.6 public function getContextualValue($use_tax, Context $context = null, $filter = null, $package = null, $use_cache = true) { if (!CartRule::isFeatureActive()) { return 0; } if (!$context) { $context = Context::getContext(); } if (!$filter) { $filter = CartRule::FILTER_ACTION_ALL; } $all_products = $context->cart->getProducts(); $package_products = (is_null($package) ? $all_products : $package['products']); $all_cart_rules_ids = $context->cart->getOrderedCartRulesIds(); $cart_amount_ti = $context->cart->getOrderTotal(true, Cart::ONLY_PRODUCTS); $cart_amount_te = $context->cart->getOrderTotal(false, Cart::ONLY_PRODUCTS); $reduction_value = 0; $cache_id = 'getContextualValue_'.(int)$this->id.'_'.(int)$use_tax.'_'.(int)$context->cart->id.'_'.(int)$filter; foreach ($package_products as $product) { $cache_id .= '_'.(int)$product['id_product'].'_'.(int)$product['id_product_attribute'].(isset($product['in_stock']) ? '_'.(int)$product['in_stock'] : ''); } if (Cache::isStored($cache_id)) { return Cache::retrieve($cache_id); } // Free shipping on selected carriers if ($this->free_shipping && in_array($filter, array(CartRule::FILTER_ACTION_ALL, CartRule::FILTER_ACTION_ALL_NOCAP, CartRule::FILTER_ACTION_SHIPPING))) { if (!$this->carrier_restriction) { $reduction_value += $context->cart->getOrderTotal($use_tax, Cart::ONLY_SHIPPING, is_null($package) ? null : $package['products'], is_null($package) ? null : $package['id_carrier']); } else { $data = Db::getInstance()->executeS(' SELECT crc.id_cart_rule, c.id_carrier FROM '._DB_PREFIX_.'cart_rule_carrier crc INNER JOIN '._DB_PREFIX_.'carrier c ON (c.id_reference = crc.id_carrier AND c.deleted = 0) WHERE crc.id_cart_rule = '.(int)$this->id.' AND c.id_carrier = '.(int)$context->cart->id_carrier); if ($data) { foreach ($data as $cart_rule) { $reduction_value += $context->cart->getCarrierCost((int)$cart_rule['id_carrier'], $use_tax, $context->country); } } } } if (in_array($filter, array(CartRule::FILTER_ACTION_ALL, CartRule::FILTER_ACTION_ALL_NOCAP, CartRule::FILTER_ACTION_REDUCTION))) { // Discount (%) on the whole order if ($this->reduction_percent && $this->reduction_product == 0) { // Do not give a reduction on free products! $order_total = $context->cart->getOrderTotal($use_tax, Cart::ONLY_PRODUCTS, $package_products); foreach ($context->cart->getCartRules(CartRule::FILTER_ACTION_GIFT) as $cart_rule) { $order_total -= Tools::ps_round($cart_rule['obj']->getContextualValue($use_tax, $context, CartRule::FILTER_ACTION_GIFT, $package), _PS_PRICE_COMPUTE_PRECISION_); } // MODIF : Pour ne pas appliquer la reduction aux promotions. Pour la règle : montant total de la commande // AJOUT foreach ($package_products as $product) { if (!empty($product['reduction_applies']) && $product['reduction_applies'] > 0) { $reduction_value -= ($use_tax ? $product['total_wt'] : $product['total']) * $this->reduction_percent / 100; } } // fin $reduction_value += $order_total * $this->reduction_percent / 100; } // Discount (%) on a specific product if ($this->reduction_percent && $this->reduction_product > 0) { foreach ($package_products as $product) { // MODIF : Pour ne pas appliquer la reduction aux promotions. Pour la règle : produit spécifique //if ($product['id_product'] == $this->reduction_product) { // $reduction_value += ($use_tax ? $product['total_wt'] : $product['total']) * $this->reduction_percent / 100; //} if (!empty($product["reduction_applies"]) && $product["reduction_applies"] > 0) { $product_on_sale = true; } if ($product['id_product'] == $this->reduction_product && !$product_on_sale) { $reduction_value += ($use_tax ? $product['total_wt'] : $product['total']) * $this->reduction_percent / 100; } // fin } } // Discount (%) on the cheapest product if ($this->reduction_percent && $this->reduction_product == -1) { $minPrice = false; $cheapest_product = null; foreach ($all_products as $product) { // MODIF : Pour prendre en compte la quantité. Pour la règle : produit le moins cher //$price = $product['price']; $price = $product['price']*$product['cart_quantity']; // fin if ($use_tax) { // since later on we won't be able to know the product the cart rule was applied to, // use average cart VAT for price_wt $price *= (1 + $context->cart->getAverageProductsTaxRate()); } // MODIF : Pour ne pas appliquer la reduction aux promotions. Pour la règle : montant total de la commande //if ($price > 0 && ($minPrice === false || $minPrice > $price)) { // $minPrice = $price; // $cheapest_product = $product['id_product'].'-'.$product['id_product_attribute']; //} if ($price > 0 && ($minPrice === false || $minPrice > $price) && $product["reduction_applies"] <= 0) { $minPrice = $price; $cheapest_product = $product['id_product'].'-'.$product['id_product_attribute']; } // fin } // Check if the cheapest product is in the package $in_package = false; foreach ($package_products as $product) { if ($product['id_product'].'-'.$product['id_product_attribute'] == $cheapest_product || $product['id_product'].'-0' == $cheapest_product) { $in_package = true; } } if ($in_package) { $reduction_value += $minPrice * $this->reduction_percent / 100; } } // Discount (%) on the selection of products if ($this->reduction_percent && $this->reduction_product == -2) { $selected_products_reduction = 0; $selected_products = $this->checkProductRestrictions($context, true); if (is_array($selected_products)) { foreach ($package_products as $product) { if (in_array($product['id_product'].'-'.$product['id_product_attribute'], $selected_products) || in_array($product['id_product'].'-0', $selected_products)) { // MODIF : Pour ne pas appliquer la reduction aux promotions. Pour la règle : selection de produit //$price = $product['price']; //if ($use_tax) { // $infos = Product::getTaxesInformations($product, $context); // $tax_rate = $infos['rate'] / 100; // $price *= (1 + $tax_rate); //} //$selected_products_reduction += $price * $product['cart_quantity']; if ($product["reduction_applies"] <= 0) { $price = $product['price']; if ($use_tax) { $infos = Product::getTaxesInformations($product, $context); $tax_rate = $infos['rate'] / 100; $price *= (1 + $tax_rate); } $selected_products_reduction += $price * $product['cart_quantity']; } // fin } } } $reduction_value += $selected_products_reduction * $this->reduction_percent / 100; } // Discount (¤) if ((float)$this->reduction_amount > 0) { $prorata = 1; if (!is_null($package) && count($all_products)) { $total_products = $context->cart->getOrderTotal($use_tax, Cart::ONLY_PRODUCTS); if ($total_products) { $prorata = $context->cart->getOrderTotal($use_tax, Cart::ONLY_PRODUCTS, $package['products']) / $total_products; } } $reduction_amount = $this->reduction_amount; // If we need to convert the voucher value to the cart currency if (isset($context->currency) && $this->reduction_currency != $context->currency->id) { $voucherCurrency = new Currency($this->reduction_currency); // First we convert the voucher value to the default currency if ($reduction_amount == 0 || $voucherCurrency->conversion_rate == 0) { $reduction_amount = 0; } else { $reduction_amount /= $voucherCurrency->conversion_rate; } // Then we convert the voucher value in the default currency into the cart currency $reduction_amount *= $context->currency->conversion_rate; $reduction_amount = Tools::ps_round($reduction_amount, _PS_PRICE_COMPUTE_PRECISION_); } // If it has the same tax application that you need, then it's the right value, whatever the product! if ($this->reduction_tax == $use_tax) { // The reduction cannot exceed the products total, except when we do not want it to be limited (for the partial use calculation) if ($filter != CartRule::FILTER_ACTION_ALL_NOCAP) { $cart_amount = $context->cart->getOrderTotal($use_tax, Cart::ONLY_PRODUCTS); $reduction_amount = min($reduction_amount, $cart_amount); } $reduction_value += $prorata * $reduction_amount; } else { if ($this->reduction_product > 0) { foreach ($context->cart->getProducts() as $product) { if ($product['id_product'] == $this->reduction_product) { $product_price_ti = $product['price_wt']; $product_price_te = $product['price']; $product_vat_amount = $product_price_ti - $product_price_te; if ($product_vat_amount == 0 || $product_price_te == 0) { $product_vat_rate = 0; } else { $product_vat_rate = $product_vat_amount / $product_price_te; } if ($this->reduction_tax && !$use_tax) { $reduction_value += $prorata * $reduction_amount / (1 + $product_vat_rate); } elseif (!$this->reduction_tax && $use_tax) { $reduction_value += $prorata * $reduction_amount * (1 + $product_vat_rate); } } } } // Discount (¤) on the whole order elseif ($this->reduction_product == 0) { $cart_amount_te = null; $cart_amount_ti = null; $cart_average_vat_rate = $context->cart->getAverageProductsTaxRate($cart_amount_te, $cart_amount_ti); // The reduction cannot exceed the products total, except when we do not want it to be limited (for the partial use calculation) if ($filter != CartRule::FILTER_ACTION_ALL_NOCAP) { $reduction_amount = min($reduction_amount, $this->reduction_tax ? $cart_amount_ti : $cart_amount_te); } if ($this->reduction_tax && !$use_tax) { $reduction_value += $prorata * $reduction_amount / (1 + $cart_average_vat_rate); } elseif (!$this->reduction_tax && $use_tax) { $reduction_value += $prorata * $reduction_amount * (1 + $cart_average_vat_rate); } } /* * Reduction on the cheapest or on the selection is not really meaningful and has been disabled in the backend * Please keep this code, so it won't be considered as a bug * elseif ($this->reduction_product == -1) * elseif ($this->reduction_product == -2) */ } // Take care of the other cart rules values if the filter allow it if ($filter != CartRule::FILTER_ACTION_ALL_NOCAP) { // Cart values $cart = Context::getContext()->cart; if (!Validate::isLoadedObject($cart)) { $cart = new Cart(); } $cart_average_vat_rate = $cart->getAverageProductsTaxRate(); $current_cart_amount = $use_tax ? $cart_amount_ti : $cart_amount_te; foreach ($all_cart_rules_ids as $current_cart_rule_id) { if ((int)$current_cart_rule_id['id_cart_rule'] == (int)$this->id) { break; } $previous_cart_rule = new CartRule((int)$current_cart_rule_id['id_cart_rule']); $previous_reduction_amount = $previous_cart_rule->reduction_amount; if ($previous_cart_rule->reduction_tax && !$use_tax) { $previous_reduction_amount = $prorata * $previous_reduction_amount / (1 + $cart_average_vat_rate); } elseif (!$previous_cart_rule->reduction_tax && $use_tax) { $previous_reduction_amount = $prorata * $previous_reduction_amount * (1 + $cart_average_vat_rate); } $current_cart_amount = max($current_cart_amount - (float)$previous_reduction_amount, 0); } $reduction_value = min($reduction_value, $current_cart_amount); } } } // Free gift if ((int)$this->gift_product && in_array($filter, array(CartRule::FILTER_ACTION_ALL, CartRule::FILTER_ACTION_ALL_NOCAP, CartRule::FILTER_ACTION_GIFT))) { $id_address = (is_null($package) ? 0 : $package['id_address']); foreach ($package_products as $product) { if ($product['id_product'] == $this->gift_product && ($product['id_product_attribute'] == $this->gift_product_attribute || !(int)$this->gift_product_attribute)) { // The free gift coupon must be applied to one product only (needed for multi-shipping which manage multiple product lists) if (!isset(CartRule::$only_one_gift[$this->id.'-'.$this->gift_product]) || CartRule::$only_one_gift[$this->id.'-'.$this->gift_product] == $id_address || CartRule::$only_one_gift[$this->id.'-'.$this->gift_product] == 0 || $id_address == 0 || !$use_cache) { $reduction_value += ($use_tax ? $product['price_wt'] : $product['price']); if ($use_cache && (!isset(CartRule::$only_one_gift[$this->id.'-'.$this->gift_product]) || CartRule::$only_one_gift[$this->id.'-'.$this->gift_product] == 0)) { CartRule::$only_one_gift[$this->id.'-'.$this->gift_product] = $id_address; } break; } } } } Cache::store($cache_id, $reduction_value); return $reduction_value; }
  13. Bonjour, A première vue ce doit etre le module "Filigrane" qui fait ca. Faudrait le désactiver et regénérer les images (Préférences > Images > regénérer les miniature)
  14. Bonjour, vous avez bien désactivé les taxes ? Dans Localisation > Taxes > Activer les taxes (Tout en bas)
  15. Seulement celui à la racine de ton dossier prestashop (dans www en général)
  16. Regarde si dans tes "statuts personnalisés" (Commandes > Statuts) t'as bien coché : Considérer la commande comme validée. Ce module prend seulement en compte les commandes validées (Et donc payées)
  17. A vu de nez c'est qu'il manque des fichiers et du coup qu'il n'arrive pas a charger les pages... --------- Pour importer ton Prestashop en local : - Sauvegarder ta base sur le site en ligne (Paramètres avancés > sauvegarde BdD) - Vider le cache (Paramètres avancés > performance) - Importer tous les fichiers via FTP (Sauf .htaccess) (Perso je fais dossier par dossier car des fois il en oublie ^^) Une fois que tu as tout récupéré : - Ouvrir le fichier config/settings.inc.php et modifier les 4 infos ci dessous : define('_DB_SERVER_', 'localhost'); define('_DB_NAME_', 'nomdelabase'); define('_DB_USER_', 'nomutilisateur'); define('_DB_PASSWD_', 'motdepasse'); - Ouvrir PhpMyAdmin et importer la base qui se trouve dans TOMADMIN/backups/ Enfin tu vas directement sur http://localhost/TONADMIN/ Là Prestashop va te dire que le domaine n'est pas bon. Tu cliques, tu modifies le nom et hop c'est tout ! Je fais comme ça depuis longtemps et j'ai jamais eu de soucis
  18. ^^ Mais tu as bien fait car pas d'export des données dans ce module :/
  19. Heu, il y a un module natif de Prestashop "statsstock" qui le fait je crois... Statistiques > Statistiques > Quantités disponibles
  20. Il existe celui ci : http://addons.prestashop.com/fr/6270-paiement-par-carte-de-credit-hors-ligne-debit-pos.html
  21. Suffit de faire une copie de PaymentModule.php dans override > classes et effacer class_index.php dans le dossier cache pour que ce soit pris en compte
  22. Bonjour, Voici un petit module sans prétention qui affiche le chiffre d'affaires, les stats par groupe de clients. Je me suis basé sur un autre module de Prestashop Il fonctionne sous Prestashop 1.6 statsbestgroups.zip
  23. Salut, Dans le fichier mailalert.php, essaie d'ajouter (Vers la ligne 340) : $group = new Group($customer->id_default_group,$this->context->lang->id); Après ça : $order_state = $params['orderStatus']; Puis ajoutes : '{customergroup}' => $group->name, Apres ça : $template_vars = array( '{firstname}' => $customer->firstname, '{lastname}' => $customer->lastname, Et bien entendu, tu places {customergroup} dans le fichier du mail que tu veux J'ai pas testé mais ca devrait t'afficher le groupe par défaut
×
×
  • Create New...

Important Information

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