Add attribute combinasions in export

modifié:         core/lib/Thelia/ImportExport/Export/Type/ProductPricesExport.php
This commit is contained in:
Benjamin Perche
2014-07-22 13:51:40 +02:00
parent ad3c1ce387
commit 94c44ea003

View File

@@ -12,18 +12,18 @@
namespace Thelia\ImportExport\Export\Type; namespace Thelia\ImportExport\Export\Type;
use Propel\Runtime\ActiveQuery\Criteria; use Propel\Runtime\ActiveQuery\Criteria;
use Propel\Runtime\Propel;
use Thelia\Core\FileFormat\Formatting\FormatterData; use Thelia\Core\FileFormat\Formatting\FormatterData;
use Thelia\Core\FileFormat\FormatType; use Thelia\Core\FileFormat\FormatType;
use Thelia\ImportExport\Export\ExportHandler; use Thelia\ImportExport\Export\ExportHandler;
use Thelia\Model\Base\ProductSaleElementsQuery; use Thelia\Model\Base\AttributeCombinationQuery;
use Thelia\Model\Lang; use Thelia\Model\Lang;
use Thelia\Model\Map\AttributeAvI18nTableMap;
use Thelia\Model\Map\AttributeAvTableMap;
use Thelia\Model\Map\CurrencyTableMap; use Thelia\Model\Map\CurrencyTableMap;
use Thelia\Model\Map\ProductI18nTableMap; use Thelia\Model\Map\ProductI18nTableMap;
use Thelia\Model\Map\ProductPriceTableMap; use Thelia\Model\Map\ProductPriceTableMap;
use Thelia\Model\Map\ProductSaleElementsTableMap; use Thelia\Model\Map\ProductSaleElementsTableMap;
use Thelia\Model\ProductI18nQuery; use Thelia\Model\Map\ProductTableMap;
use Thelia\Model\Tools\ModelCriteriaTools;
/** /**
* Class ProductPricesExport * Class ProductPricesExport
@@ -64,45 +64,73 @@ class ProductPricesExport extends ExportHandler
public function buildFormatterData(Lang $lang) public function buildFormatterData(Lang $lang)
{ {
$aliases = [ $aliases = [
ProductSaleElementsTableMap::REF => "ref", "product_sale_elements_REF" => "ref",
ProductSaleElementsTableMap::EAN_CODE => "ean", "product_sale_elements_EAN_CODE" => "ean",
"price_PRICE" => "price", "price_PRICE" => "price",
"price_PROMO_PRICE" => "promo_price", "price_PROMO_PRICE" => "promo_price",
"currency_CODE" => "currency", "currency_CODE" => "currency",
"product_TITLE" => "title", "product_TITLE" => "title",
"attribute_av_i18n_ATTRIBUTES" => "attributes",
]; ];
$locale = $this->real_escape($lang->getLocale()); $locale = $this->real_escape($lang->getLocale());
$defaultLocale = $this->real_escape(Lang::getDefaultLanguage()->getLocale()); $defaultLocale = $this->real_escape(Lang::getDefaultLanguage()->getLocale());
$query = ProductSaleElementsQuery::create() $query = AttributeCombinationQuery::create()
->useProductPriceQuery() ->useProductSaleElementsQuery()
->useCurrencyQuery() ->useProductPriceQuery()
->addAsColumn("currency_CODE", CurrencyTableMap::CODE) ->useCurrencyQuery()
->addAsColumn("currency_CODE", CurrencyTableMap::CODE)
->endUse()
->addAsColumn("price_PRICE", ProductPriceTableMap::PRICE)
->addAsColumn("price_PROMO_PRICE", ProductPriceTableMap::PROMO_PRICE)
->endUse() ->endUse()
->addAsColumn("price_PRICE", ProductPriceTableMap::PRICE) ->useProductQuery()
->addAsColumn("price_PROMO_PRICE", ProductPriceTableMap::PROMO_PRICE) ->useProductI18nQuery()
->addAsColumn("product_TITLE", ProductI18nTableMap::TITLE)
->endUse()
->endUse()
->addAsColumn("product_sale_elements_REF", ProductSaleElementsTableMap::REF)
->addAsColumn("product_sale_elements_EAN_CODE", ProductSaleElementsTableMap::EAN_CODE)
->endUse() ->endUse()
->useProductQuery() ->useAttributeAvQuery()
->useProductI18nQuery(null, Criteria::LEFT_JOIN) ->useAttributeAvI18nQuery(null, Criteria::INNER_JOIN)
->addAsColumn("product_TITLE", ProductI18nTableMap::TITLE) ->addAsColumn(
"attribute_av_i18n_ATTRIBUTES",
"GROUP_CONCAT(DISTINCT ".AttributeAvI18nTableMap::TITLE.")"
)
->endUse() ->endUse()
->endUse() ->endUse()
->select([ ->select([
ProductSaleElementsTableMap::REF, "product_sale_elements_REF",
ProductSaleElementsTableMap::EAN_CODE, "product_sale_elements_EAN_CODE",
"price_PRICE", "price_PRICE",
"price_PROMO_PRICE", "price_PROMO_PRICE",
"currency_CODE", "currency_CODE",
"product_TITLE" "product_TITLE",
"attribute_av_i18n_ATTRIBUTES",
]) ])
->where( ->where(
"CASE WHEN `product`.ID IN". "CASE WHEN ".ProductTableMap::ID." IN".
"(SELECT DISTINCT id FROM product_i18n WHERE locale=$locale)". "(SELECT DISTINCT ".ProductI18nTableMap::ID." ".
"THEN product_i18n.locale = $locale ". "FROM `".ProductI18nTableMap::TABLE_NAME."` ".
"ELSE product_i18n.locale = $defaultLocale ". "WHERE locale=$locale) ".
"THEN ".ProductI18nTableMap::LOCALE." = $locale ".
"ELSE ".ProductI18nTableMap::LOCALE." = $defaultLocale ".
"END" "END"
) )
->_and()
->where(
"CASE WHEN ".AttributeAvTableMap::ID." IN".
"(SELECT DISTINCT ".AttributeAvI18nTableMap::ID." ".
"FROM `".AttributeAvI18nTableMap::TABLE_NAME."` ".
"WHERE locale=$locale)".
"THEN ".AttributeAvI18nTableMap::LOCALE." = $locale ".
"ELSE ".AttributeAvI18nTableMap::LOCALE." = $defaultLocale ".
"END"
)
->groupBy("product_sale_elements_REF")
; ;
$data = new FormatterData($aliases); $data = new FormatterData($aliases);