tax in loops
This commit is contained in:
@@ -510,6 +510,12 @@ class Product extends BaseI18nLoop
|
|||||||
foreach ($products as $product) {
|
foreach ($products as $product) {
|
||||||
$loopResultRow = new LoopResultRow($loopResult, $product, $this->versionable, $this->timestampable, $this->countable);
|
$loopResultRow = new LoopResultRow($loopResult, $product, $this->versionable, $this->timestampable, $this->countable);
|
||||||
|
|
||||||
|
$price = $product->getRealLowestPrice();
|
||||||
|
$taxedPrice = $product->getTaxedPrice(
|
||||||
|
CountryQuery::create()->findOneById(64) // @TODO : make it magic
|
||||||
|
);
|
||||||
|
|
||||||
|
|
||||||
$loopResultRow->set("ID", $product->getId())
|
$loopResultRow->set("ID", $product->getId())
|
||||||
->set("REF",$product->getRef())
|
->set("REF",$product->getRef())
|
||||||
->set("IS_TRANSLATED",$product->getVirtualColumn('IS_TRANSLATED'))
|
->set("IS_TRANSLATED",$product->getVirtualColumn('IS_TRANSLATED'))
|
||||||
@@ -519,10 +525,9 @@ class Product extends BaseI18nLoop
|
|||||||
->set("DESCRIPTION", $product->getVirtualColumn('i18n_DESCRIPTION'))
|
->set("DESCRIPTION", $product->getVirtualColumn('i18n_DESCRIPTION'))
|
||||||
->set("POSTSCRIPTUM", $product->getVirtualColumn('i18n_POSTSCRIPTUM'))
|
->set("POSTSCRIPTUM", $product->getVirtualColumn('i18n_POSTSCRIPTUM'))
|
||||||
->set("URL", $product->getUrl($locale))
|
->set("URL", $product->getUrl($locale))
|
||||||
->set("BEST_PRICE", $product->getRealLowestPrice())
|
->set("BEST_PRICE", $price)
|
||||||
->set("BEST_TAXED_PRICE", $product->getTaxedPrice(
|
->set("BEST_PRICE_TAX", $taxedPrice - $price)
|
||||||
CountryQuery::create()->findOneById(64) // @TODO : make it magic
|
->set("BEST_TAXED_PRICE", $taxedPrice)
|
||||||
))
|
|
||||||
->set("IS_PROMO", $product->getVirtualColumn('main_product_is_promo'))
|
->set("IS_PROMO", $product->getVirtualColumn('main_product_is_promo'))
|
||||||
->set("IS_NEW", $product->getVirtualColumn('main_product_is_new'))
|
->set("IS_NEW", $product->getVirtualColumn('main_product_is_new'))
|
||||||
->set("POSITION", $product->getPosition())
|
->set("POSITION", $product->getPosition())
|
||||||
|
|||||||
@@ -35,6 +35,7 @@ use Thelia\Log\Tlog;
|
|||||||
|
|
||||||
use Thelia\Model\Base\ProductSaleElementsQuery;
|
use Thelia\Model\Base\ProductSaleElementsQuery;
|
||||||
use Thelia\Model\ConfigQuery;
|
use Thelia\Model\ConfigQuery;
|
||||||
|
use Thelia\Model\CountryQuery;
|
||||||
use Thelia\Type\TypeCollection;
|
use Thelia\Type\TypeCollection;
|
||||||
use Thelia\Type;
|
use Thelia\Type;
|
||||||
|
|
||||||
@@ -124,6 +125,15 @@ class ProductSaleElements extends BaseLoop
|
|||||||
foreach ($PSEValues as $PSEValue) {
|
foreach ($PSEValues as $PSEValue) {
|
||||||
$loopResultRow = new LoopResultRow($loopResult, $PSEValue, $this->versionable, $this->timestampable, $this->countable);
|
$loopResultRow = new LoopResultRow($loopResult, $PSEValue, $this->versionable, $this->timestampable, $this->countable);
|
||||||
|
|
||||||
|
$price = $PSEValue->getPrice();
|
||||||
|
$taxedPrice = $PSEValue->getTaxedPrice(
|
||||||
|
CountryQuery::create()->findOneById(64) // @TODO : make it magic
|
||||||
|
);
|
||||||
|
$promoPrice = $PSEValue->getPromoPrice();
|
||||||
|
$taxedPromoPrice = $PSEValue->getTaxedPromoPrice(
|
||||||
|
CountryQuery::create()->findOneById(64) // @TODO : make it magic
|
||||||
|
);
|
||||||
|
|
||||||
$loopResultRow->set("ID", $PSEValue->getId())
|
$loopResultRow->set("ID", $PSEValue->getId())
|
||||||
->set("QUANTITY", $PSEValue->getQuantity())
|
->set("QUANTITY", $PSEValue->getQuantity())
|
||||||
->set("IS_PROMO", $PSEValue->getPromo() === 1 ? 1 : 0)
|
->set("IS_PROMO", $PSEValue->getPromo() === 1 ? 1 : 0)
|
||||||
@@ -131,8 +141,12 @@ class ProductSaleElements extends BaseLoop
|
|||||||
->set("WEIGHT", $PSEValue->getWeight())
|
->set("WEIGHT", $PSEValue->getWeight())
|
||||||
|
|
||||||
->set("CURRENCY", $PSEValue->getVirtualColumn('price_CURRENCY_ID'))
|
->set("CURRENCY", $PSEValue->getVirtualColumn('price_CURRENCY_ID'))
|
||||||
->set("PRICE", $PSEValue->getVirtualColumn('price_PRICE'))
|
->set("PRICE", $price)
|
||||||
->set("PROMO_PRICE", $PSEValue->getVirtualColumn('price_PROMO_PRICE'));
|
->set("PRICE_TAX", $taxedPrice - $price)
|
||||||
|
->set("TAXED_PRICE", $taxedPrice)
|
||||||
|
->set("PROMO_PRICE", $promoPrice)
|
||||||
|
->set("PROMO_PRICE_TAX", $taxedPromoPrice - $promoPrice)
|
||||||
|
->set("TAXED_PROMO_PRICE", $taxedPromoPrice);
|
||||||
|
|
||||||
$loopResult->addRow($loopResultRow);
|
$loopResult->addRow($loopResultRow);
|
||||||
}
|
}
|
||||||
@@ -28,6 +28,6 @@ class Product extends BaseProduct
|
|||||||
public function getTaxedPrice(Country $country)
|
public function getTaxedPrice(Country $country)
|
||||||
{
|
{
|
||||||
$taxCalculator = new Calculator();
|
$taxCalculator = new Calculator();
|
||||||
return $taxCalculator->load($this, $country)->getTaxedPrice();
|
return $taxCalculator->load($this, $country)->getTaxedPrice($this->getRealLowestPrice());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -3,8 +3,41 @@
|
|||||||
namespace Thelia\Model;
|
namespace Thelia\Model;
|
||||||
|
|
||||||
use Thelia\Model\Base\ProductSaleElements as BaseProductSaleElements;
|
use Thelia\Model\Base\ProductSaleElements as BaseProductSaleElements;
|
||||||
|
use Thelia\TaxEngine\Calculator;
|
||||||
|
|
||||||
class ProductSaleElements extends BaseProductSaleElements
|
class ProductSaleElements extends BaseProductSaleElements
|
||||||
{
|
{
|
||||||
|
public function getPrice($virtualColumnName = 'price_PRICE')
|
||||||
|
{
|
||||||
|
try {
|
||||||
|
$amount = $this->getVirtualColumn($virtualColumnName);
|
||||||
|
} catch(PropelException $e) {
|
||||||
|
throw new PropelException("Virtual column `$virtualColumnName` does not exist in ProductSaleElements::getPrice");
|
||||||
|
}
|
||||||
|
|
||||||
|
return $amount;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getPromoPrice($virtualColumnName = 'price_PROMO_PRICE')
|
||||||
|
{
|
||||||
|
try {
|
||||||
|
$amount = $this->getVirtualColumn($virtualColumnName);
|
||||||
|
} catch(PropelException $e) {
|
||||||
|
throw new PropelException("Virtual column `$virtualColumnName` does not exist in ProductSaleElements::getPromoPrice");
|
||||||
|
}
|
||||||
|
|
||||||
|
return $amount;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getTaxedPrice(Country $country)
|
||||||
|
{
|
||||||
|
$taxCalculator = new Calculator();
|
||||||
|
return $taxCalculator->load($this->getProduct(), $country)->getTaxedPrice($this->getPrice());
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getTaxedPromoPrice(Country $country)
|
||||||
|
{
|
||||||
|
$taxCalculator = new Calculator();
|
||||||
|
return $taxCalculator->load($this->getProduct(), $country)->getTaxedPrice($this->getPromoPrice());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -37,8 +37,6 @@ class TaxRuleQuery extends BaseTaxRuleQuery
|
|||||||
->withColumn('ROUND(SUM(' . TaxTableMap::RATE . '), 2)', self::ALIAS_FOR_TAX_RATE_SUM)
|
->withColumn('ROUND(SUM(' . TaxTableMap::RATE . '), 2)', self::ALIAS_FOR_TAX_RATE_SUM)
|
||||||
;
|
;
|
||||||
|
|
||||||
//var_dump($search->toString());
|
|
||||||
|
|
||||||
return $search->find();
|
return $search->find();
|
||||||
}
|
}
|
||||||
} // TaxRuleQuery
|
} // TaxRuleQuery
|
||||||
|
|||||||
@@ -67,14 +67,16 @@ class Calculator
|
|||||||
return $this;
|
return $this;
|
||||||
}
|
}
|
||||||
|
|
||||||
public function getTaxAmount()
|
public function getTaxAmount($amount)
|
||||||
{
|
{
|
||||||
|
if(false === filter_var($amount, FILTER_VALIDATE_FLOAT)) {
|
||||||
|
throw new TaxEngineException('BAD AMOUNT FORMAT', TaxEngineException::BAD_AMOUNT_FORMAT);
|
||||||
|
}
|
||||||
|
|
||||||
if(null === $this->taxRulesGroupedCollection) {
|
if(null === $this->taxRulesGroupedCollection) {
|
||||||
throw new TaxEngineException('Tax rules collection is empty in Calculator::getTaxAmount', TaxEngineException::UNDEFINED_TAX_RULES_COLLECTION);
|
throw new TaxEngineException('Tax rules collection is empty in Calculator::getTaxAmount', TaxEngineException::UNDEFINED_TAX_RULES_COLLECTION);
|
||||||
}
|
}
|
||||||
|
|
||||||
$amount = $this->product->getRealLowestPrice();
|
|
||||||
|
|
||||||
$taxRateAmount = 0;
|
$taxRateAmount = 0;
|
||||||
foreach($this->taxRulesGroupedCollection as $taxRule) {
|
foreach($this->taxRulesGroupedCollection as $taxRule) {
|
||||||
$taxRateAmount += $taxRule->getTaxRuleRateSum();
|
$taxRateAmount += $taxRule->getTaxRuleRateSum();
|
||||||
@@ -83,8 +85,12 @@ class Calculator
|
|||||||
return $amount * $taxRateAmount * 0.01;
|
return $amount * $taxRateAmount * 0.01;
|
||||||
}
|
}
|
||||||
|
|
||||||
public function getTaxedPrice()
|
public function getTaxedPrice($amount)
|
||||||
{
|
{
|
||||||
return $this->product->getRealLowestPrice() + $this->getTaxAmount();
|
if(false === filter_var($amount, FILTER_VALIDATE_FLOAT)) {
|
||||||
|
throw new TaxEngineException('BAD AMOUNT FORMAT', TaxEngineException::BAD_AMOUNT_FORMAT);
|
||||||
|
}
|
||||||
|
|
||||||
|
return $amount + $this->getTaxAmount($amount);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -189,6 +189,14 @@ class URL
|
|||||||
{
|
{
|
||||||
if(ConfigQuery::isRewritingEnable()) {
|
if(ConfigQuery::isRewritingEnable()) {
|
||||||
$this->retriever->loadViewUrl($view, $viewLocale, $viewId);
|
$this->retriever->loadViewUrl($view, $viewLocale, $viewId);
|
||||||
|
} else {
|
||||||
|
$allParametersWithoutView = array();
|
||||||
|
$allParametersWithoutView['locale'] = $viewLocale;
|
||||||
|
if(null !== $viewId) {
|
||||||
|
$allParametersWithoutView[$view . '_id'] = $viewId;
|
||||||
|
}
|
||||||
|
$this->retriever->rewrittenUrl = null;
|
||||||
|
$this->retriever->url = URL::getInstance()->viewUrl($view, $allParametersWithoutView);
|
||||||
}
|
}
|
||||||
|
|
||||||
return $this->retriever;
|
return $this->retriever;
|
||||||
@@ -220,6 +228,14 @@ class URL
|
|||||||
}
|
}
|
||||||
|
|
||||||
$this->retriever->loadSpecificUrl($view, $viewLocale, $viewId, $allOtherParameters);
|
$this->retriever->loadSpecificUrl($view, $viewLocale, $viewId, $allOtherParameters);
|
||||||
|
} else {
|
||||||
|
$allParametersWithoutView = $viewOtherParameters;
|
||||||
|
$allParametersWithoutView['locale'] = $viewLocale;
|
||||||
|
if(null !== $viewId) {
|
||||||
|
$allParametersWithoutView[$view . '_id'] = $viewId;
|
||||||
|
}
|
||||||
|
$this->retriever->rewrittenUrl = null;
|
||||||
|
$this->retriever->url = URL::getInstance()->viewUrl($view, $allParametersWithoutView);
|
||||||
}
|
}
|
||||||
|
|
||||||
return $this->retriever;
|
return $this->retriever;
|
||||||
|
|||||||
@@ -32,7 +32,7 @@
|
|||||||
<h4>#TITLE</h4>
|
<h4>#TITLE</h4>
|
||||||
<p>#DESCRIPTION</p>
|
<p>#DESCRIPTION</p>
|
||||||
|
|
||||||
<p>Starting by #BEST_PRICE € HT (#BEST_TAXED_PRICE € TTC)</p>
|
<p>Starting by #BEST_PRICE € HT (TAX : #BEST_PRICE_TAX ; #BEST_TAXED_PRICE € TTC)</p>
|
||||||
|
|
||||||
{ifloop rel="ft"}
|
{ifloop rel="ft"}
|
||||||
<h5>Features</h5>
|
<h5>Features</h5>
|
||||||
|
|||||||
@@ -13,6 +13,8 @@ Index : {navigate to="index"}<br />
|
|||||||
<h3>#TITLE</h3>
|
<h3>#TITLE</h3>
|
||||||
<p>#DESCRIPTION</p>
|
<p>#DESCRIPTION</p>
|
||||||
|
|
||||||
|
<p>Starting by #BEST_PRICE € HT (TAX : #BEST_PRICE_TAX ; #BEST_TAXED_PRICE € TTC)</p>
|
||||||
|
|
||||||
{ifloop rel="acc"}
|
{ifloop rel="acc"}
|
||||||
<h4>Accessories</h4>
|
<h4>Accessories</h4>
|
||||||
<ul>
|
<ul>
|
||||||
@@ -64,7 +66,7 @@ Index : {navigate to="index"}<br />
|
|||||||
#ATTRIBUTE_TITLE = #ATTRIBUTE_AVAILABILITY_TITLE<br />
|
#ATTRIBUTE_TITLE = #ATTRIBUTE_AVAILABILITY_TITLE<br />
|
||||||
{/loop}
|
{/loop}
|
||||||
<br />#WEIGHT g
|
<br />#WEIGHT g
|
||||||
<br /><strong>{if #IS_PROMO == 1} #PROMO_PRICE € (instead of #PRICE) {else} #PRICE € {/if}</strong>
|
<br /><strong>{if #IS_PROMO == 1} #PROMO_PRICE € HT // TAX : #PROMO_PRICE_TAX ; #TAXED_PROMO_PRICE € TTC (instead of #PRICE HT // TAX : #PRICE_TAX ; #TAXED_PRICE € TTC){else} #PRICE € HT // TAX : #PRICE_TAX ; #TAXED_PRICE € TTC{/if}</strong>
|
||||||
<br /><br />
|
<br /><br />
|
||||||
Add
|
Add
|
||||||
<select>
|
<select>
|
||||||
|
|||||||
Reference in New Issue
Block a user