VirtueMart Forum

VirtueMart 2 + 3 + 4 => Product pricing => Topic started by: Roccofx1 on March 04, 2016, 06:59:31 AM

Title: VM3 - How to display final price only for discounted product?
Post by: Roccofx1 on March 04, 2016, 06:59:31 AM
Hi, I have Joomla 3.4.8 and VM 3.0.12

How can i show the finall price only for products with discount applied, main reason is right now we can select to show base price, final price, discount, but the problem with this is that products without any discunt will still show both prices, same price twice: base price and final price, so it looks strange, like this:

WITHOUT DISCOUNT:

Base Price $20
Final Price: $20

WITH DISCOUNT

Base price $20
Discount -$10
Final Price: $10

So i want to add a rule or something so this "final price" only appears if that product has discount, so product without discount will only show 1 price

Please help

Title: Re: VM3 - How to display final price only for discounted product?
Post by: Studio 42 on March 04, 2016, 12:16:32 PM
Check if you have a discount price, and only display it in this case.
You need to do this in your price render here : YOURSITE\components\com_virtuemart\sublayouts\prices.php
Title: Re: VM3 - How to display final price only for discounted product?
Post by: Roccofx1 on March 06, 2016, 03:35:22 AM
Ok i found that file, now what do i have to do?
Title: Re: VM3 - How to display final price only for discounted product?
Post by: GJC Web Design on March 06, 2016, 22:02:10 PM
QuoteCheck if you have a discount price, and only display it in this case.
Title: Re: VM3 - How to display final price only for discounted product?
Post by: Roccofx1 on March 06, 2016, 23:26:41 PM
Not any clear answer to edit the file

I already got that file, and it shows codes... i cant check codes, i can only create a rule in virtuemart for that product but in order to display the "discount" tag i have to enable it for all products! but i only want to discount 1 not 20... so the other 19 will show an empty discount, for example Discount: nothing (it looks bad) so if i make a rule that only discounts the price of 1 product, it will change the actual price fo that 1 product but by not saying discount is 20% or -$10 then people wont now it has been discounted already. It must say "discunt is" -$10 only for that product, i want this tag only to appear for dicounted products.

This is what the file shows, how can i edit this to show the discount tag only for discounted products:

<div class="product-price" id="productPrice<?php echo $product->virtuemart_product_id ?>">
   <?php
   if (!empty($product->prices['salesPrice'])) {
      //echo '<div class="vm-cart-price">' . vmText::_ ('COM_VIRTUEMART_CART_PRICE') . '</div>';
   }

   if ($product->prices['salesPrice']<=0 and VmConfig::get ('askprice', 1) and isset($product->images[0]) and !$product->images[0]->file_is_downloadable) {
      $askquestion_url = JRoute::_('index.php?option=com_virtuemart&view=productdetails&task=askquestion&virtuemart_product_id=' . $product->virtuemart_product_id . '&virtuemart_category_id=' . $product->virtuemart_category_id . '&tmpl=component', FALSE);
      ?>
      <a class="ask-a-question bold" href="<?php echo $askquestion_url ?>" rel="nofollow" ><?php echo vmText::_ ('COM_VIRTUEMART_PRODUCT_ASKPRICE') ?></a>
      <?php
   } else {
   //if ($showBasePrice) {
      echo $currency->createPriceDiv ('basePrice', 'COM_VIRTUEMART_PRODUCT_BASEPRICE', $product->prices);
      //if (round($product->prices['basePrice'],$currency->_priceConfig['basePriceVariant'][1]) != $product->prices['basePriceVariant']) {
         echo $currency->createPriceDiv ('basePriceVariant', 'COM_VIRTUEMART_PRODUCT_BASEPRICE_VARIANT', $product->prices);
      //}

   //}
   echo $currency->createPriceDiv ('variantModification', 'COM_VIRTUEMART_PRODUCT_VARIANT_MOD', $product->prices);
   if (round($product->prices['basePriceWithTax'],$currency->_priceConfig['salesPrice'][1]) != round($product->prices['salesPrice'],$currency->_priceConfig['salesPrice'][1])) {
      echo '<span class="price-crossed" >' . $currency->createPriceDiv ('basePriceWithTax', 'COM_VIRTUEMART_PRODUCT_BASEPRICE_WITHTAX', $product->prices) . "</span>";
   }
   if (round($product->prices['salesPriceWithDiscount'],$currency->_priceConfig['salesPrice'][1]) != round($product->prices['salesPrice'],$currency->_priceConfig['salesPrice'][1])) {
      echo $currency->createPriceDiv ('salesPriceWithDiscount', 'COM_VIRTUEMART_PRODUCT_SALESPRICE_WITH_DISCOUNT', $product->prices);
   }
   echo $currency->createPriceDiv ('salesPrice', 'COM_VIRTUEMART_PRODUCT_SALESPRICE', $product->prices);
   if ($product->prices['discountedPriceWithoutTax'] != $product->prices['priceWithoutTax']) {
      echo $currency->createPriceDiv ('discountedPriceWithoutTax', 'COM_VIRTUEMART_PRODUCT_SALESPRICE_WITHOUT_TAX', $product->prices);
   } else {
      echo $currency->createPriceDiv ('priceWithoutTax', 'COM_VIRTUEMART_PRODUCT_SALESPRICE_WITHOUT_TAX', $product->prices);
   }
   echo $currency->createPriceDiv ('discountAmount', 'COM_VIRTUEMART_PRODUCT_DISCOUNT_AMOUNT', $product->prices);
   echo $currency->createPriceDiv ('taxAmount', 'COM_VIRTUEMART_PRODUCT_TAX_AMOUNT', $product->prices);
   $unitPriceDescription = vmText::sprintf ('COM_VIRTUEMART_PRODUCT_UNITPRICE', vmText::_('COM_VIRTUEMART_UNIT_SYMBOL_'.$product->product_unit));
   echo $currency->createPriceDiv ('unitPrice', $unitPriceDescription, $product->prices);
   }
   ?>
</div>

?
Title: Re: VM3 - How to display final price only for discounted product?
Post by: Studio 42 on March 07, 2016, 07:46:49 AM
The base code to check is
if ($product->prices['discountedPriceWithoutTax'] != $product->prices['priceWithoutTax']) {
// your price here
}

To check if you have a discount or
if ($product->prices['discountedPriceWithoutTax'] == $product->prices['priceWithoutTax']) {
// your price here
}

To check if you have no discount

You have to use one or other depending your need with the right price type (unitPrice,taxAmount, ...)
eg.
if ($product->prices['discountedPriceWithoutTax'] != $product->prices['priceWithoutTax']) {
echo $currency->createPriceDiv ('discountAmount', 'COM_VIRTUEMART_PRODUCT_DISCOUNT_AMOUNT', $product->prices);
}

Title: Re: VM3 - How to display final price only for discounted product?
Post by: Mart DOP on March 15, 2016, 19:05:30 PM
i understand what you are trying to do as i am trying to achieve the same thing.

the prices.php file from Virtuemart only check which option is checked in the configuration file and display whatever.

So basically we only want one price to display, let's say the Final Sales Price. But we need a condition that check if the product is currently in discount and if yes you fetch the basePrice and display it above the Final Price and customize the Final price with some CSS.







Title: Re: VM3 - How to display final price only for discounted product?
Post by: julash on April 18, 2016, 09:45:05 AM
Hello Friends,

I am also looking this solution. I dont know php and so could not understand how "Studio 42" and "Mart DOP" doing it.

Its really confusing for product with no discount showing double price. So I think virtuemart should include a feature not to show base price when there is no discount in product.

Can anyone explain how to get this working? Will really appreciate any help.

Thanks
Julash
Title: Re: VM3 - How to display final price only for discounted product?
Post by: Studio 42 on April 18, 2016, 13:03:36 PM
Hi Julash,
I can only say you to read the post.