diff --git a/core/lib/Thelia/Controller/Admin/BaseAdminController.php b/core/lib/Thelia/Controller/Admin/BaseAdminController.php index 30d6dd9df..dbb08a103 100755 --- a/core/lib/Thelia/Controller/Admin/BaseAdminController.php +++ b/core/lib/Thelia/Controller/Admin/BaseAdminController.php @@ -227,7 +227,7 @@ class BaseAdminController extends BaseController * * @see \Thelia\Controller\BaseController::getRouteFromRouter() */ - protected function getRoute($routeId, $parameters = array(), $referenceType = Router::RELATIVE_PATH) + protected function getRoute($routeId, $parameters = array(), $referenceType = Router::ABSOLUTE_URL) { return $this->getRouteFromRouter( 'router.admin', diff --git a/core/lib/Thelia/Controller/BaseController.php b/core/lib/Thelia/Controller/BaseController.php index c55dd1258..bd2556072 100755 --- a/core/lib/Thelia/Controller/BaseController.php +++ b/core/lib/Thelia/Controller/BaseController.php @@ -235,7 +235,7 @@ class BaseController extends ContainerAware * @throws \InvalidArgumentException When the router doesn't exist * @return string The generated URL */ - protected function getRouteFromRouter($routerName, $routeId, $parameters = array(), $referenceType = Router::RELATIVE_PATH) + protected function getRouteFromRouter($routerName, $routeId, $parameters = array(), $referenceType = Router::ABSOLUTE_URL) { /** @var Router $router */ $router = $this->container->get($routerName); diff --git a/core/lib/Thelia/Core/Template/Loop/ProductSaleElements.php b/core/lib/Thelia/Core/Template/Loop/ProductSaleElements.php index f1bbb198d..980ade454 100755 --- a/core/lib/Thelia/Core/Template/Loop/ProductSaleElements.php +++ b/core/lib/Thelia/Core/Template/Loop/ProductSaleElements.php @@ -34,6 +34,7 @@ use Thelia\Core\Template\Loop\Argument\Argument; use Thelia\Model\Base\ProductSaleElementsQuery; use Thelia\Model\CountryQuery; use Thelia\Model\CurrencyQuery; +use Thelia\Model\Map\ProductSaleElementsTableMap; use Thelia\Type\TypeCollection; use Thelia\Type; @@ -41,7 +42,7 @@ use Thelia\Type; * * Product Sale Elements loop * - * @todo : manage currency and attribute_availability + * @todo : manage attribute_availability ? * * Class ProductSaleElements * @package Thelia\Core\Template\Loop @@ -68,9 +69,9 @@ class ProductSaleElements extends BaseLoop new Argument( 'order', new TypeCollection( - new Type\EnumListType(array('alpha', 'alpha_reverse', 'attribute', 'attribute_reverse')) + new Type\EnumListType(array('min_price', 'max_price', 'promo', 'new', 'random')) ), - 'attribute' + 'random' ) ); } @@ -94,16 +95,16 @@ class ProductSaleElements extends BaseLoop foreach ($orders as $order) { switch ($order) { case "min_price": - $search->addAscendingOrderByColumn('real_lowest_price', Criteria::ASC); + $search->addAscendingOrderByColumn('price_FINAL_PRICE', Criteria::ASC); break; case "max_price": - $search->addDescendingOrderByColumn('real_lowest_price'); + $search->addDescendingOrderByColumn('price_FINAL_PRICE'); break; case "promo": - $search->addDescendingOrderByColumn('main_product_is_promo'); + $search->orderByPromo(Criteria::DESC); break; case "new": - $search->addDescendingOrderByColumn('main_product_is_new'); + $search->orderByNewness(Criteria::DESC); break; case "random": $search->clearOrderByColumns(); @@ -125,12 +126,22 @@ class ProductSaleElements extends BaseLoop $defaultCurrency = CurrencyQuery::create()->findOneByByDefault(1); $defaultCurrencySuffix = '_default_currency'; - $search->joinProductPrice('price', Criteria::INNER_JOIN); - //->addJoinCondition('price', ''); + $search->joinProductPrice('price', Criteria::LEFT_JOIN) + ->addJoinCondition('price', '`price`.`currency_id` = ?', $currency->getId(), null, \PDO::PARAM_INT); - $search->withColumn('`price`.CURRENCY_ID', 'price_CURRENCY_ID') - ->withColumn('`price`.PRICE', 'price_PRICE') - ->withColumn('`price`.PROMO_PRICE', 'price_PROMO_PRICE'); + $search->joinProductPrice('price' . $defaultCurrencySuffix, Criteria::LEFT_JOIN) + ->addJoinCondition('price_default_currency', '`price' . $defaultCurrencySuffix . '`.`currency_id` = ?', $defaultCurrency->getId(), null, \PDO::PARAM_INT); + + /** + * rate value is checked as a float in overloaded getRate method. + */ + $priceSelectorAsSQL = 'ROUND(CASE WHEN ISNULL(`price`.PRICE) THEN `price_default_currency`.PRICE * ' . $currency->getRate() . ' ELSE `price`.PRICE END, 2)'; + $promoPriceSelectorAsSQL = 'ROUND(CASE WHEN ISNULL(`price`.PRICE) THEN `price_default_currency`.PROMO_PRICE * ' . $currency->getRate() . ' ELSE `price`.PROMO_PRICE END, 2)'; + $search->withColumn($priceSelectorAsSQL, 'price_PRICE') + ->withColumn($promoPriceSelectorAsSQL, 'price_PROMO_PRICE') + ->withColumn('CASE WHEN ' . ProductSaleElementsTableMap::PROMO . ' = 1 THEN ' . $promoPriceSelectorAsSQL . ' ELSE ' . $priceSelectorAsSQL . ' END', 'price_FINAL_PRICE'); + + $search->groupById(); $PSEValues = $this->search($search, $pagination); @@ -153,8 +164,6 @@ class ProductSaleElements extends BaseLoop ->set("IS_PROMO", $PSEValue->getPromo() === 1 ? 1 : 0) ->set("IS_NEW", $PSEValue->getNewness() === 1 ? 1 : 0) ->set("WEIGHT", $PSEValue->getWeight()) - - ->set("CURRENCY", $PSEValue->getVirtualColumn('price_CURRENCY_ID')) ->set("PRICE", $price) ->set("PRICE_TAX", $taxedPrice - $price) ->set("TAXED_PRICE", $taxedPrice) diff --git a/core/lib/Thelia/Core/Thelia.php b/core/lib/Thelia/Core/Thelia.php index 9aedaaa29..402059ddd 100755 --- a/core/lib/Thelia/Core/Thelia.php +++ b/core/lib/Thelia/Core/Thelia.php @@ -83,7 +83,7 @@ class Thelia extends Kernel $con = Propel::getConnection(\Thelia\Model\Map\ProductTableMap::DATABASE_NAME); $con->setAttribute(ConnectionWrapper::PROPEL_ATTR_CACHE_PREPARES, true); if ($this->isDebug()) { - + //$serviceContainer->setLogger('defaultLogger', \Thelia\Log\Tlog::getInstance()); $con->useDebug(true); } } diff --git a/core/lib/Thelia/Tools/URL.php b/core/lib/Thelia/Tools/URL.php index d0dcd127d..05084c0c1 100755 --- a/core/lib/Thelia/Tools/URL.php +++ b/core/lib/Thelia/Tools/URL.php @@ -90,7 +90,6 @@ class URL $schemeAuthority = "$scheme://$host"."$port"; } - return $schemeAuthority.$this->requestContext->getBaseUrl(); } diff --git a/templates/default_save/product.html b/templates/default_save/product.html index f78b7e296..441585aba 100755 --- a/templates/default_save/product.html +++ b/templates/default_save/product.html @@ -1,3 +1,5 @@ +{*include file="includes/header.html"*} + Here you are : {navigate to="current"}
From : {navigate to="return_to"}
Index : {navigate to="index"}
@@ -60,7 +62,7 @@ Index : {navigate to="index"}

Product sale elements

{assign var=current_product value=$ID} - {loop name="pse" type="product_sale_elements" product="$ID"} + {loop name="pse" type="product_sale_elements" product="$ID" order="promo,min_price"}
{loop name="combi" type="attribute_combination" product_sale_elements="$ID"} {$ATTRIBUTE_TITLE} = {$ATTRIBUTE_AVAILABILITY_TITLE}
@@ -87,4 +89,6 @@ Index : {navigate to="index"}
{elseloop rel="product"}

Produit introuvable !

-{/elseloop} \ No newline at end of file +{/elseloop} + +{*include file="includes/footer.html"*} \ No newline at end of file