we are moving forward : no more "make it magic"
This commit is contained in:
@@ -16,6 +16,7 @@ use Thelia\Core\Template\Element\LoopResultRow;
|
|||||||
use Thelia\Core\Template\Loop\Argument\Argument;
|
use Thelia\Core\Template\Loop\Argument\Argument;
|
||||||
use Thelia\Core\Template\Loop\Argument\ArgumentCollection;
|
use Thelia\Core\Template\Loop\Argument\ArgumentCollection;
|
||||||
use Thelia\Model\CountryQuery;
|
use Thelia\Model\CountryQuery;
|
||||||
|
use Thelia\TaxEngine\TaxEngine;
|
||||||
use Thelia\Type;
|
use Thelia\Type;
|
||||||
|
|
||||||
class Cart extends BaseLoop implements ArraySearchLoopInterface
|
class Cart extends BaseLoop implements ArraySearchLoopInterface
|
||||||
@@ -78,7 +79,7 @@ class Cart extends BaseLoop implements ArraySearchLoopInterface
|
|||||||
|
|
||||||
public function parseResults(LoopResult $loopResult)
|
public function parseResults(LoopResult $loopResult)
|
||||||
{
|
{
|
||||||
$taxCountry = CountryQuery::create()->findPk(64); // @TODO : make it magic;
|
$taxCountry = TaxEngine::getInstance($this->request->getSession())->getTaxCountry();
|
||||||
|
|
||||||
foreach($loopResult->getResultDataCollection() as $cartItem) {
|
foreach($loopResult->getResultDataCollection() as $cartItem) {
|
||||||
$product = $cartItem->getProduct();
|
$product = $cartItem->getProduct();
|
||||||
|
|||||||
@@ -42,6 +42,7 @@ use Thelia\Model\Map\ProductPriceTableMap;
|
|||||||
use Thelia\Model\Map\ProductSaleElementsTableMap;
|
use Thelia\Model\Map\ProductSaleElementsTableMap;
|
||||||
use Thelia\Model\Map\ProductTableMap;
|
use Thelia\Model\Map\ProductTableMap;
|
||||||
use Thelia\Model\ProductQuery;
|
use Thelia\Model\ProductQuery;
|
||||||
|
use Thelia\TaxEngine\TaxEngine;
|
||||||
use Thelia\Type\TypeCollection;
|
use Thelia\Type\TypeCollection;
|
||||||
use Thelia\Type;
|
use Thelia\Type;
|
||||||
|
|
||||||
@@ -464,7 +465,7 @@ class Product extends BaseI18nLoop implements PropelSearchLoopInterface, SearchL
|
|||||||
return $this->parseComplex($loopResult);
|
return $this->parseComplex($loopResult);
|
||||||
}
|
}
|
||||||
|
|
||||||
$taxCountry = CountryQuery::create()->findPk(64); // @TODO : make it magic
|
$taxCountry = TaxEngine::getInstance($this->request->getSession())->getTaxCountry();
|
||||||
|
|
||||||
foreach ($loopResult->getResultDataCollection() as $product) {
|
foreach ($loopResult->getResultDataCollection() as $product) {
|
||||||
|
|
||||||
@@ -979,7 +980,7 @@ class Product extends BaseI18nLoop implements PropelSearchLoopInterface, SearchL
|
|||||||
{
|
{
|
||||||
$loopResult = new LoopResult($results);
|
$loopResult = new LoopResult($results);
|
||||||
|
|
||||||
$taxCountry = CountryQuery::create()->findPk(64); // @TODO : make it magic
|
$taxCountry = TaxEngine::getInstance($this->request->getSession())->getTaxCountry();
|
||||||
|
|
||||||
foreach ($loopResult->getResultDataCollection() as $product) {
|
foreach ($loopResult->getResultDataCollection() as $product) {
|
||||||
|
|
||||||
|
|||||||
@@ -40,6 +40,7 @@ use Thelia\Model\OrderQuery;
|
|||||||
use Thelia\Model\Product;
|
use Thelia\Model\Product;
|
||||||
use Thelia\Model\ProductQuery;
|
use Thelia\Model\ProductQuery;
|
||||||
use Thelia\Model\Tools\ModelCriteriaTools;
|
use Thelia\Model\Tools\ModelCriteriaTools;
|
||||||
|
use Thelia\TaxEngine\TaxEngine;
|
||||||
use Thelia\Tools\DateTimeFormat;
|
use Thelia\Tools\DateTimeFormat;
|
||||||
use Thelia\Cart\CartTrait;
|
use Thelia\Cart\CartTrait;
|
||||||
|
|
||||||
@@ -181,10 +182,10 @@ class DataAccessFunctions extends AbstractSmartyPlugin
|
|||||||
public function cartDataAccess($params, $smarty)
|
public function cartDataAccess($params, $smarty)
|
||||||
{
|
{
|
||||||
if (array_key_exists('currentCountry', self::$dataAccessCache)) {
|
if (array_key_exists('currentCountry', self::$dataAccessCache)) {
|
||||||
$currentCountry = self::$dataAccessCache['currentCountry'];
|
$taxCountry = self::$dataAccessCache['currentCountry'];
|
||||||
} else {
|
} else {
|
||||||
$currentCountry = CountryQuery::create()->findOneById(64); // @TODO : make it magic
|
$taxCountry = TaxEngine::getInstance($this->request->getSession())->getTaxCountry();
|
||||||
self::$dataAccessCache['currentCountry'] = $currentCountry;
|
self::$dataAccessCache['currentCountry'] = $taxCountry;
|
||||||
}
|
}
|
||||||
|
|
||||||
$cart = $this->getCart($this->request);
|
$cart = $this->getCart($this->request);
|
||||||
@@ -197,7 +198,7 @@ class DataAccessFunctions extends AbstractSmartyPlugin
|
|||||||
$result = $cart->getTotalAmount();
|
$result = $cart->getTotalAmount();
|
||||||
break;
|
break;
|
||||||
case "total_taxed_price":
|
case "total_taxed_price":
|
||||||
$result = $cart->getTaxedAmount($currentCountry);
|
$result = $cart->getTaxedAmount($taxCountry);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -22,6 +22,10 @@
|
|||||||
/*************************************************************************************/
|
/*************************************************************************************/
|
||||||
namespace Thelia\TaxEngine;
|
namespace Thelia\TaxEngine;
|
||||||
|
|
||||||
|
use Symfony\Component\HttpFoundation\Session\Session;
|
||||||
|
use Thelia\Model\AddressQuery;
|
||||||
|
use Thelia\Model\CountryQuery;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Class TaxEngine
|
* Class TaxEngine
|
||||||
* @package Thelia\TaxEngine
|
* @package Thelia\TaxEngine
|
||||||
@@ -29,9 +33,28 @@ namespace Thelia\TaxEngine;
|
|||||||
*/
|
*/
|
||||||
class TaxEngine
|
class TaxEngine
|
||||||
{
|
{
|
||||||
static public function getInstance()
|
protected static $instance = null;
|
||||||
|
|
||||||
|
protected static $taxCountry = null;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @var Session $session
|
||||||
|
*/
|
||||||
|
protected $session = null;
|
||||||
|
|
||||||
|
static public function getInstance(Session $session)
|
||||||
{
|
{
|
||||||
return new TaxEngine();
|
if(null === self::$instance) {
|
||||||
|
self::$instance = new TaxEngine();
|
||||||
|
}
|
||||||
|
|
||||||
|
self::$instance->setSession($session);
|
||||||
|
return self::$instance;
|
||||||
|
}
|
||||||
|
|
||||||
|
protected function setSession(Session $session)
|
||||||
|
{
|
||||||
|
$this->session = $session;
|
||||||
}
|
}
|
||||||
|
|
||||||
private function getTaxTypeDirectory()
|
private function getTaxTypeDirectory()
|
||||||
@@ -68,4 +91,36 @@ class TaxEngine
|
|||||||
|
|
||||||
return $typeList;
|
return $typeList;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Find Tax Country Id
|
||||||
|
* First look for a picked delivery address country
|
||||||
|
* Then look at the current customer default address country
|
||||||
|
* Else look at the default website country
|
||||||
|
*
|
||||||
|
* @param bool $force result is static cached ; even if a below parameter change between 2 calls, we need to keep coherent results. but you can force it.
|
||||||
|
* @return null|TaxEngine
|
||||||
|
*/
|
||||||
|
public function getTaxCountry($force = false)
|
||||||
|
{
|
||||||
|
if(false === $force || null === self::$taxCountry) {
|
||||||
|
/* is there a logged in customer ? */
|
||||||
|
if(null !== $customer = $this->session->getCustomerUser()) {
|
||||||
|
if (null !== $this->session->getOrder()
|
||||||
|
&& null !== $this->session->getOrder()->chosenDeliveryAddress
|
||||||
|
&& null !== $currentDeliveryAddress = AddressQuery::create()->findPk($this->session->getOrder()->chosenDeliveryAddress)) {
|
||||||
|
$taxCountry = $currentDeliveryAddress->getCountry();
|
||||||
|
} else {
|
||||||
|
$customerDefaultAddress = $customer->getDefaultAddress();
|
||||||
|
$taxCountry = $customerDefaultAddress->getCountry();
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
$taxCountry = CountryQuery::create()->findOneByByDefault(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
self::$taxCountry = $taxCountry;
|
||||||
|
}
|
||||||
|
|
||||||
|
return self::$taxCountry;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user