we are moving forward : no more "make it magic"
This commit is contained in:
@@ -22,6 +22,10 @@
|
||||
/*************************************************************************************/
|
||||
namespace Thelia\TaxEngine;
|
||||
|
||||
use Symfony\Component\HttpFoundation\Session\Session;
|
||||
use Thelia\Model\AddressQuery;
|
||||
use Thelia\Model\CountryQuery;
|
||||
|
||||
/**
|
||||
* Class TaxEngine
|
||||
* @package Thelia\TaxEngine
|
||||
@@ -29,9 +33,28 @@ namespace Thelia\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()
|
||||
@@ -68,4 +91,36 @@ class TaxEngine
|
||||
|
||||
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