[*] Core : Specific prices can now be applied to combinations

git-svn-id: http://dev.prestashop.com/svn/v1/branches/1.5.x@9897 b9a71923-0436-4b27-9f14-aed3839534dd
This commit is contained in:
rGaillard
2011-11-04 15:53:53 +00:00
parent eb6620fabe
commit 77a66c64fd
10 changed files with 183 additions and 145 deletions
+45 -8
View File
@@ -50,7 +50,7 @@ function oosHookJsCode()
}
//add a combination of attributes in the global JS sytem
function addCombination(idCombination, arrayOfIdAttributes, quantity, price, ecotax, id_image, reference, unit_price, minimal_quantity, available_date)
function addCombination(idCombination, arrayOfIdAttributes, quantity, price, ecotax, id_image, reference, unit_price, minimal_quantity, available_date, combination_specific_price)
{
globalQuantity += quantity;
@@ -65,8 +65,9 @@ function addCombination(idCombination, arrayOfIdAttributes, quantity, price, eco
combination['unit_price'] = unit_price;
combination['minimal_quantity'] = minimal_quantity;
combination['available_date'] = available_date;
combination['specific_price'] = new Array();
combination['specific_price'] = combination_specific_price;
combinations.push(combination);
}
// search the combinations' case of attributes and update displaying of availability, prices, ecotax, and image
@@ -111,6 +112,7 @@ function findCombination(firstTime)
quantityAvailable = combinations[combination]['quantity'];
selectedCombination['price'] = combinations[combination]['price'];
selectedCombination['unit_price'] = combinations[combination]['unit_price'];
selectedCombination['specific_price'] = combinations[combination]['specific_price'];
if (combinations[combination]['ecotax'])
selectedCombination['ecotax'] = combinations[combination]['ecotax'];
else
@@ -296,21 +298,56 @@ function updateDisplay()
var combination_add_price = selectedCombination['price'] * group_reduction;
var tax = (taxRate / 100) + 1;
var taxExclPrice = (specific_price ? (specific_currency ? specific_price : specific_price * currencyRate) : priceTaxExclWithoutGroupReduction) + selectedCombination['price'] * currencyRate;
if (specific_price)
var display_specific_price;
if (selectedCombination['specific_price'])
{
display_specific_price = selectedCombination['specific_price'].price;
if (selectedCombination['specific_price'].reduction_type == 'percentage')
{
$('#reduction_percent_display').html(selectedCombination['specific_price'].reduction*100);
$('#reduction_percent').show();
}
else
$('#reduction_percent').hide();
}
else
{
display_specific_price = specific_price;
if (display_specific_price)
{
if (product_specific_price.reduction_type == 'percentage')
{
$('#reduction_percent_display').html(product_specific_price['specific_price'].reduction*100);
$('#reduction_percent').show();
}
else
$('#reduction_percent').hide();
if (productPriceWithoutRedution < productPrice)
$('#old_price_display,#old_price_display_taxes').show();
}
}
if (display_specific_price)
$('#discount_reduced_price,#old_price,#not_impacted_by_discount, #old_price_display, #old_price_display_taxes').show();
else
$('#discount_reduced_price,#old_price,#not_impacted_by_discount,#old_price_display,#old_price_display_taxes').hide();
var taxExclPrice = (display_specific_price ? (specific_currency ? display_specific_price : display_specific_price * currencyRate) : priceTaxExclWithoutGroupReduction) + selectedCombination['price'] * currencyRate;
if (display_specific_price)
var productPriceWithoutReduction = priceTaxExclWithoutGroupReduction + selectedCombination['price'] * currencyRate;
if (!displayPrice && !noTaxForThisProduct)
{
var productPrice = taxExclPrice * tax;
if (specific_price)
if (display_specific_price)
productPriceWithoutReduction = ps_round(productPriceWithoutReduction * tax, 2);
}
else
{
var productPrice = ps_round(taxExclPrice, 2);
if (specific_price)
if (display_specific_price)
productPriceWithoutReduction = ps_round(productPriceWithoutReduction, 2);
}
@@ -322,7 +359,7 @@ function updateDisplay()
reduction = ps_round(reduction / tax, 6);
}
if (!specific_price)
if (!display_specific_price)
productPriceWithoutReduction = productPrice * group_reduction;
@@ -617,4 +654,4 @@ $(document).ready(function(){
else
window.location = url.substring(0, url.indexOf('#'));
}
});
});
+36 -31
View File
@@ -52,6 +52,10 @@ var productPriceTaxExcluded = {$product->getPriceWithoutReduct(true)|default:'nu
var reduction_percent = {if $product->specificPrice AND $product->specificPrice.reduction AND $product->specificPrice.reduction_type == 'percentage'}{$product->specificPrice.reduction*100}{else}0{/if};
var reduction_price = {if $product->specificPrice AND $product->specificPrice.reduction AND $product->specificPrice.reduction_type == 'amount'}{$product->specificPrice.reduction}{else}0{/if};
var specific_price = {if $product->specificPrice AND $product->specificPrice.price}{$product->specificPrice.price}{else}0{/if};
var product_specific_price = new Array();
{foreach from=$product->specificPrice key='key_specific_price' item='specific_price_value'}
product_specific_price['{$key_specific_price}'] = '{$specific_price_value}';
{/foreach}
var specific_currency = {if $product->specificPrice AND $product->specificPrice.id_currency}true{else}false{/if};
var group_reduction = '{$group_reduction}';
var default_eco_tax = {$product->ecotax};
@@ -66,6 +70,17 @@ var productShowPrice = '{if !$PS_CATALOG_MODE}{$product->show_price}{else}0{/if}
var productUnitPriceRatio = '{$product->unit_price_ratio}';
var idDefaultImage = {if isset($cover.id_image_only)}{$cover.id_image_only}{else}0{/if};
{if !$priceDisplay || $priceDisplay == 2}
{assign var='productPrice' value=$product->getPrice(true, $smarty.const.NULL, 2)}
{assign var='productPriceWithoutRedution' value=$product->getPriceWithoutReduct(false, $smarty.const.NULL)}
{elseif $priceDisplay == 1}
{assign var='productPrice' value=$product->getPrice(false, $smarty.const.NULL, 2)}
{assign var='productPriceWithoutRedution' value=$product->getPriceWithoutReduct(true, $smarty.const.NULL)}
{/if}
var productPriceWithoutRedution = '{$productPriceWithoutRedution}';
var product_price = '{$productPrice}';
// Customizable field
var img_ps_dir = '{$img_ps_dir}';
var customizationFields = new Array();
@@ -104,11 +119,16 @@ var doesntExistNoMore = '{l s='This product is no longer in stock' js=1}';
var doesntExistNoMoreBut = '{l s='with those attributes but is available with others' js=1}';
var uploading_in_progress = '{l s='Uploading in progress, please wait...' js=1}';
var fieldRequired = '{l s='Please fill in all required fields, then save the customization.' js=1}';
{if isset($groups)}
// Combinations
{foreach from=$combinations key=idCombination item=combination}
addCombination({$idCombination|intval}, new Array({$combination.list}), {$combination.quantity}, {$combination.price}, {$combination.ecotax}, {$combination.id_image}, '{$combination.reference|addslashes}', {$combination.unit_impact}, {$combination.minimal_quantity}, '{$combination.available_date}');
var specific_price_combination = new Array();
{if $combination.specific_price}
{foreach from=$combination.specific_price key='specific_price_key' item='combination_specific_price'}
specific_price_combination['{$specific_price_key}'] = '{$combination_specific_price}';
{/foreach}
{/if}
addCombination({$idCombination|intval}, new Array({$combination.list}), {$combination.quantity}, {$combination.price}, {$combination.ecotax}, {$combination.id_image}, '{$combination.reference|addslashes}', {$combination.unit_impact}, {$combination.minimal_quantity}, '{$combination.available_date}', specific_price_combination);
{/foreach}
{/if}
@@ -231,19 +251,11 @@ var fieldRequired = '{l s='Please fill in all required fields, then save the cus
<!-- prices -->
{if $product->show_price AND !isset($restricted_country_mode) AND !$PS_CATALOG_MODE}
<p class="price">
{if !$priceDisplay || $priceDisplay == 2}
{assign var='productPrice' value=$product->getPrice(true, $smarty.const.NULL, 2)}
{assign var='productPriceWithoutRedution' value=$product->getPriceWithoutReduct(false, $smarty.const.NULL)}
{elseif $priceDisplay == 1}
{assign var='productPrice' value=$product->getPrice(false, $smarty.const.NULL, 2)}
{assign var='productPriceWithoutRedution' value=$product->getPriceWithoutReduct(true, $smarty.const.NULL)}
{/if}
{if $product->on_sale}
<img src="{$img_dir}onsale_{$lang_iso}.gif" alt="{l s='On sale'}" class="on_sale_img"/>
<span class="on_sale">{l s='On sale!'}</span>
{elseif $product->specificPrice AND $product->specificPrice.reduction AND $productPriceWithoutRedution > $productPrice}
<span class="discount">{l s='Reduced price!'}</span>
{/if}
<span style="{if !$product->specificPrice AND !$product->specificPrice.reduction AND $productPriceWithoutRedution < $productPrice}display:none;{/if}" id="discount_reduced_price" class="discount">{l s='Reduced price!'}</span>
<br />
<span class="our_price_display">
{if $priceDisplay >= 0 && $priceDisplay <= 2}
@@ -259,31 +271,27 @@ var fieldRequired = '{l s='Please fill in all required fields, then save the cus
{/if}
<br />
</p>
{if $product->specificPrice AND $product->specificPrice.reduction}
<p id="old_price"><span class="bold">
{if $priceDisplay >= 0 && $priceDisplay <= 2}
{if $productPriceWithoutRedution > $productPrice}
<span id="old_price_display">{convertPrice price=$productPriceWithoutRedution}</span>
{if $tax_enabled && $display_tax_label == 1}
{if $priceDisplay == 1}{l s='tax excl.'}{else}{l s='tax incl.'}{/if}
{/if}
<p style="{if !$product->specificPrice AND !$product->specificPrice.reduction}display:none;{/if}" id="old_price">
<span class="bold">
{if $priceDisplay >= 0 && $priceDisplay <= 2}
<span style="{if $productPriceWithoutRedution < $productPrice}display:none;{/if}" id="old_price_display">{convertPrice price=$productPriceWithoutRedution}</span>
{if $tax_enabled && $display_tax_label == 1}
<span style="{if $productPriceWithoutRedution < $productPrice}display:none;{/if}" id="old_price_display_taxes">{if $priceDisplay == 1}{l s='tax excl.'}{else}{l s='tax incl.'}{/if}</span>
{/if}
{/if}
{/if}
</span>
</p>
{/if}
{if $product->specificPrice AND $product->specificPrice.reduction_type == 'percentage'}
<p id="reduction_percent">{l s='(price reduced by'} <span id="reduction_percent_display">{$product->specificPrice.reduction*100}</span> %{l s=')'}</p>
{/if}
</p>
<p style="{if !$product->specificPrice AND !$product->specificPrice.reduction_type == 'percentage'}display:none;{/if}" id="reduction_percent">{l s='(price reduced by'} <span id="reduction_percent_display">{$product->specificPrice.reduction*100}</span> %{l s=')'}</p>
{if $packItems|@count}
<p class="pack_price">{l s='instead of'} <span style="text-decoration: line-through;">{convertPrice price=$product->getNoPackPrice()}</span></p>
<br class="clear" />
{/if}
{if $product->ecotax != 0}
<p class="price-ecotax">{l s='include'} <span id="ecotax_price_display">{if $priceDisplay == 2}{$ecotax_tax_exc|convertAndFormatPrice}{else}{$ecotax_tax_inc|convertAndFormatPrice}{/if}</span> {l s='for green tax'}
{if $product->specificPrice AND $product->specificPrice.reduction}
<br />{l s='(not impacted by the discount)'}
<br />
<span style="{if !$product->specificPrice AND !$product->specificPrice.reduction}display:none;{/if}" id="not_impacted_by_discount">{l s='(not impacted by the discount)'}</span>
{/if}
</p>
{/if}
@@ -576,6 +584,3 @@ var fieldRequired = '{l s='Please fill in all required fields, then save the cus
{include file="$tpl_dir./product-list.tpl" products=$packItems}
</div>
{/if}
{/if}